ひなた先生が教えるデバッグが256倍速くなるテクニック

ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books)

ひなた先生が教えるデバッグが256倍速くなるテクニック (Software Design Books)

某所で教えてもらった。
確かにデバッグはプログラムの20倍くらい難しい。


定石はあるのだが、中々言葉では伝えにくい。
例えば再現性100%ならロジック系の間違い。操作に関係なく一定の比率でランダムに起こるなら割り込み系を疑う。


まず、再現させて再現率を調べる。(再現率は後々、対策されたかどうかの目安にもなる)
100%再現なら間違いなく直せる。
ログを出すなりデバッガー・ICEを使うなりで素直にロジックを追いかけていけばいい。
数十回に1回程度なら何とか、発生した時と発生しない時の状態を比較することで解析できる。
再現しないものが一番難しい。


メモリ関係やセマフォー関連などやばいシステムコールを使うものは一度ラッパーをかましてログを出させるようにしておくと後々役に立つ。開放忘れや枯渇時にエラーを出させるようにできるから。


最近あった不具合ではグローバル変数に保存した使ってないディスクリプタをclose()するとかいうちゃぶ台返ししたくなるようなのがあった。せめてclose()の戻り値を確認していればまだ救えるのに。


ずっとデバッグしていると動作見るだけでなんとなく不具合原因の予想がつくようになってくる。
先日も後輩が1日中かかってバグが見つからなかった所のソースを見ただけでバグを見つけたことがある。
要は範囲外アクセスで関係ない所を壊して飛ばしていたので、「範囲外アクセスしそうなコード」でソースをフィルタリングして見れば直ぐにおかしな所は見つかるわけである。


しかしデバッグというののやり方は中々公式化できなくて、事例ごとに「これがこうだから、こうだろ?」と教えるしかないので
デバッグの本があるならちょっと読んで見たい気がする。

P.S こんなのも出してるらしい

解析魔法少女 美咲ちゃん マジカル・オープン!

解析魔法少女 美咲ちゃん マジカル・オープン!