2009-03-28

_ デバッグのこつ

わたしがprintf()デバッグをしない理由とか わたしがprintf()デバッグをする理由とかを見て、 私も何か書こうかと思ったんですが、 面倒くさくなってやめてました。 でもちょっとだけ書くことにします。

前にも書いたんですけど、 Ian Lance TaylorのDebuggingというエッセイ を読んでください、でお終いだったりします。 特にここ。

Of course, sometimes a debugger does not help. [省略] In such cases simple print statements can sometimes help locate the source of the bad behaviour. Add print statements to relevant locations, rebuild the program, replicate the problem with the new program, and use the print statements to hone in on exactly what code is being executed when the problem occurs.

まあ、要するに使える方法を使いましょうね、ってこと。 どっちかしか駄目なんてことはありません。 これまた前も書いたことですが、「全か無か」みたいな主張は大体において間違っています。

ちなみに、C前提の話だと、私はほとんどprintfデバッグです。 ソースコード・レベルのデバッガ(gdbとか)が最適化したコードだとまともに追えなくなることが多いので、結局-O0とか付けてコンパイルし直す羽目になる上、そうしたらいきなり問題が起きなくなるという、とてつもなく嫌な現象に何度も出会ってきたもので。

後、TwitterではデバッガのUIの問題とかつぶやいてましたが、それはまあどうでもいいや。 デバッガ使うのはピンポイントできそうな時ぐらい。 そうでないと、大抵余計に時間がかかる気がしますね。

それはともかく、デバッグなんてのは、時間と労力を大量に必要とする作業なんですから、効率のいいデバッグ方法を考えるのも結構なんですが、 その前にバグのないコードを書くことをもっと考えた方がいいでしょう。enbug.orgを持っている私が言うのも何ですが。

現実には私もそれ相応にバグを生産しているわけではありますが、 今まで見てきた他の開発者と比べると、ほとんどの場合、私の方がバグが少ないです。 これは思い切り自慢です。

それには当然コツがあります。 でもケチなので教えてあげません。 冗談です。 本当はどうやったら言葉に出来るか、よくわからないだけです。

一つ確実に言えるのは、いきなり書かないってことでしょうね。 書く前に頭の中に絵を描くことが大事。 その絵がきちんとはまらない、動かないようなら、そんなものはコードにして動くわけないです。 そもそもうまく書けないです。 大抵のバグは、書いた本人でさえ、自信を持ってどうなっているか説明できないような所にあります。

しかしそれでもバグ全然なしってのは無理です。 この前同僚にデバッグにはコツがあるのかと訊かれました。 そのとき、私は「あったらこっちが知りたい」と答えました。 でもデバッグのときも私は大抵の人よりは早いみたいです。 だから自分なりの何かがあるんだと思います。 いくつか例をあげると、

  • 情報を見落とさない。時々変なことが起きているのにログすら見ずに「わからない」とかぼやいている人を見ます。得られる情報は片っ端から利用するのはプログラマなら当然のことです。低レベルになれば、妙なところに1ピクセル光っているとか、ビープが何回鳴ったとか、ディスクの回転音でさえ、有効に使われます。
  • 今ある情報から仮説を組み立てる。論理的に考えれば、結構なことがわかります。入手可能な情報をしらみつぶしにかき集めていたら、日が暮れます。本格推理に通じるものがあります。だから私はエンジニアは本格推理を読んだ方がいいとよく勧めているんですが、真に受けてくれた人はあんまりいません。
  • 経験に基づく直感を使う。こればかりは経験積めってことにしかならないんですが、やっぱりよくあるパターンとかがあったり、エラーメッセージがどういう原因と呼応しているか簡単にわかるとか、そういうのは経験して覚えるしかないです。ただし、経験は思い込みを招きやすくて、直感はしばしば外れるので、過信は禁物です。
  • 全体像を捉える。難しいバグは問題が明るみに出るポイントの近辺にはないことがほとんどです。ちゃんとプログラムの全体を考えることが大事です。特に設計上のバグだったりした場合には、ちっちゃいコードをいくら眺めていても埒があかないです。ツールに頼る人はこの手のバグに極めて弱いです。
本日のTrackBacks(全1件) []
_ カビ対策:カビ対策 (2009-08-25 01:27)

カビ対策をして家の中からカビを除去しましょう。


トップ «前の日記(2009-02-28) 最新 次の日記(2009-04-01)»