デバッガなんて使わねーよ

吉岡さんのblogより。

gdb を emacs から使う

へー、

アプリケーションの開発時にはデバッガーを使うのはあたりまえだろう。そのデバッガーを使えなくて何がプログラマだ、くらいの事は思うのだけど

そうか、私はプログラマじゃないんだな。

この手の言い草はよく聞くけれど、私はデバッガはほとんど使わない。使ってもせいぜい、どうしても他に資料のないコアダンプを解析しなきゃいけない時だけで、普段はまるっきり使わない。そこにソースがあるなら、怪しい箇所を推理しつつprintfをつっこむ。なぜなら、私はプログラムを書く時に一番大切なものは、そういったツールを使う能力ではなくて、

思考力

であると思うからだ。それと共に、本当にクリティカルなバグには、デバッガは無力だからでもある。

プログラムを書く領域の違いってのはあるんだろうけど、どうやっても取れないなーというバグってのは、微妙なタイミングの絡むmulti threadなプログラムだったり、発生確率の低い領域破壊だったりする。そういったのってデバッガうまくやるのは難しい。領域破壊なんてのは、electric fenceとか使う。これもスレッド絡みだとうまく行かなかったりするけど。むしろ、デバッガなんぞで簡単に見つかるようなバグで悩むようだったら、そっちの方がプログラマとして終わってると思う。核ミサイルに防弾チョッキやヘルメットがあっても、無駄無駄無駄無駄無駄…

いや、別に合理的な理由なんてどうでもいいんだ。ただ、私はデバッガなんてあんまり好きでないし、デバッガを動かすことで隠れてしまうバグとかも結構あって、あくまでも経験的に適当なプローブルーチン(って、ほとんどprintfだけど)をぶっこむ方がやりやすいってこと。確かにそういったことの準備が悪いと、デバッガの方が楽だし早いんだろうけど、元々そういったものをぶっこむ習慣を持っていて、それ用の部品とかもいっぱい持っているから、あんまり面倒臭いことでもない。

さすがに資料がコアダンプしかない時は、デバッガ使うしかないんだけど、そんな時に限ってシンボルが入ってないという罠があったり。だから、私にはデバッガの「成功体験」がまるでない。そのせいもあって、どうしても「デバッガは便利だよ」「デバッガを使え」という意見には同調出来ない。

それよりは、必要なだけプローブルーチンをぶっこんで、適当に動作を監視しつつ資料を取って、それとコードを眺める方がずっと虫が取れる。だってデバッグで一番大事なのは

推理力

だろ。下手に情報が多いと情報に惑わされるなんてのも、情報の世界では常識だよな。こういった能力を身につけるには、デバッガなんて頼らないでひたすらコードを読んで動かしまくることだと思う。

つーことで、私はデバッガなんて使わない。それで困ったことはほとんどないし。まぁ若者相手に酔っぱらい親父が訓示垂れるんだったら、こういった言い草もいいんだろうけど。

PS.

twitterで吉岡さんにdisり返されたヽ(`Д´)ノ 「想定内」なんだそうで。

それは逆に言えば、私にとってデバッガなんてその程度のツールでしかないってこと。読みスジとしては、「愛の反対は無関心」ってこと。「それよりエディタの方が」と書こうと思ったけど、エディタも実はそんなに思い入れがなくて、Emacsがなければないなりに何とかしちゃう。思い入れのある、いろいろ語ってしまうようなツールってないなぁ。

PS2.

確かに使うと便利だなとは思うのよ。うまく目的にフィットしてくれればね。

でも、いつもそんなに具合よく使えない。multi-threadになるとたいていお手上げだし、Shiroさんも書いてるようなVM的なものも多用するんだけど、これもお手上げに近い。特にVMのように状態遷移しながらグルグルってのは、汎用のデバッガではなかなか難しい。いろいろ翻訳する工夫を考えたら、そんなロジックを最初から組み込む方がいい。

私にとってデバッガって「デレツン」なんだよね。

デバッガなんて使わねーよ” への4件のコメント

  1. ICEをデバッガと呼ぶかどうかはあれですが。

    ICEはあると本当に助かることがあります。
    HWの不具合で、メモリがごくまれに壊れるとか。
    そういう時にソフトウェアが壊していないことを、
    証明できたりするので。不具合原因のHWとSWの
    切り分けに大変役立つことがあります。

    まずソースコードチェックというのは、ハゲドウですが。

  2. ピンバック: cactusman日誌

  3. デバッガだけではどうしようもないのはそうですが、だからといってデバッガを否定するのは筋違いかと。木を切るならチェーンソーがあったほうが便利ですし。
    ただ、今のデバッガはチェーンソー並みに気が利かないのは問題ですね。デバッガにprintf(というかログ取り)支援機能が無いのは何でなんだろう?

  4. そうですね、デバッグっていうかトラブルシューティングにもっとも大切なのは思考力その中でも想像力と推理力ですよね。そういう意味でデバッガとprintfはprintfのほうが意識を集中させやすいだけ使いやすいツールなのかもしれない。

    ところで別の分野で人体の「不具合」つまり病気なんですけど、これを診断する名医のセリフがこのおごちゃんの書いているのに似ている。病気の治療もトラブルシューティングの一種と考えると、自然と似てくるのかも。

コメントは受け付けていません。