OSC2004/デバッガの使い方
http://osc.ospn.jp/ お疲れ様でした。出張カーネル読書会(第44回)をやってきました。段取り悪くてすいません。>参加の皆様。
デバッガーの使い方をお題に適当にヨタ話をかましました。
基本的な操作として
- プログラムの実行を止める場所を設定する(break)
- プログラムを実行する(run)
- データの値を出力する(print)
- プログラムのスタックを表示する(bt)
- プログラムの実行を再開する(c/next/step)
- アドレスの値が変更されたら実行をとめる(watch)
上記の組合せ。
ブレークポイントの決め方
- やみくもにやる(効率が悪すぎる)
- シングルステップ実行(遅すぎる)
- coreがある時は簡単。(coreが発生する直前にbする。bt スタックトレースを見て上に登る)
- ソースコードからアタリをつける
- 実行プロファイラでアタリをつける
- エキスパートに聞く
- googleに聞く
フロアからの議論で、念力で決める(笑)とか、同僚に説明するとかいう案も出ていた。エキスパートの場合、直感でエイヤと決めているように見えるが(まあ、それが経験と勘というヤツだ)、言語化するのが難しいとしてもなんらかの経験則によってその場所を決定しているのだと思う。その経験則を言語化できればいいなあと思う。同僚に説明するというのも有効な技である。誰かに説明するということは現象を分かりやすく言わなければいけないのだけど、そのプロセスそのものが問題を深く理解するあるいは問題を整理するのに役にたつ。そのプロセスによって自分では意識していなかった問題などが明確化することもある。
デバッガーをなぜ使うかと言うと、デバッグをするためというのは半分正しくて半分正しくない。(?!)わたしの場合はデバッガーを使うのはプログラムを詳細に理解するためだ。動的構造をこれだけ正しく理解するのに役立つツールをわたしは他に知らない。デバッガーの使い過ぎはプログラムをちゃんと読むということを疎かにするという指摘もあるがわたし自身はその立場をとらない。
出張カーネル読書会では上記のような話をしつつ消去したファイルのリカバリーをどうするかという(夏休みの宿題ですな)問題について、デモを交えつつ紹介するつもりだったんだけどプロジェクターとノートの相性(?)が悪くて表示できなくてだめであった。とほほ。(ディスプレードライバがいかんのかなあ)