実践デバッグ技法

オライリー・ジャパンから『 実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング 』を頂戴した。

概要

オライリーの『実践xxx』『Mastering xxx』 という本は技術xxxに少し慣れてきた人が更にステップアップするための本という印象がある。そして、体系的な理論というよりは現場の常識というものを扱っている。

『実践デバッグ技法』は前者の印象には反する。これは本当にGDBの使い方と問題の切り分け方を手取り足取り教えてくれる本で、まだデバッガが何なのかすら分かっていない人こそ読むべきだ。

一方で後者の印象には合致する。これこそが『 Debug Hacks -デバッグを極めるテクニック&ツール 』で著者のよしおかさんが訴えていた点でもあった。つまり、今までデバッグの技法というものは理論化されそれが普及しているとは言い難い。にもかかわらず、現場では常識である。初心者はどうにかしてこれを身につけなければならないが、ではガイドとなる本はどれだけあったろうか。

デバッグ技法の伝授

私もどうやってデバッグのやり方を覚えたかといえば、独自の試行錯誤と、デバッガのマニュアルと、断片的に見聞きする技を頼りになんとなくであった。そういえば、最初はデバッガというものの存在自体を理解していなくて、意図せずIDE内でステップ実行になって戸惑ったことがあるような記憶がある。

よしおかさんたちはカーネルプログラムの場合を中心にこの文書化を試みて、『Debug Hacks』でそれを成し遂げた。『実践デバッグ技法』は『Debug Hacks』よりはもっと初心者向けで、ユーザーランドのプログラマ向けにデバッグのやり方を教えてくれる。

対象技術

内容はGDBが中心で、そのフロントエンドとしてのDDDとEclipse (with CDT)の使い方も並行してずっと扱っている。要するに、GNUユーザーランドでC/C++開発をする場合が話題の中心だ。

GDBのコマンド体系や「ブレークポイントとは何か」から話を始めて、マルチスレッドプログラムのバグをどうやって発見するかまで書いてある。また、最後のほうではPerlPythonのデバッガ、Visual C++の場合もいくらか書いてある。トレーサーやメモリデバッガの話もある。

対象読者

printfデバッグしか知らない初心者はこの本を読まなければならない。どのみち最後にはこの本に書いてあることを身につけることになるのだから、ならば無駄な遠回りをする必要はない。

GDBを使いこなして開発をしている人なら、この本の内容は大体知っていることだろう。でも、やはり使わない機能は印象に残らないので、具体的なデバッグ例とともに一回りの機能を扱っているのは有り難い。自信のある人でも、気が向いたら読んでみてもよいのではないだろうか。 私はGDBのinfoはざっと読んだから一応機能は頭に入っているつもりだったけれども、ttyコマンドは「そんなのあったっけ」と思った。cursesプログラムはprintfデバッグが不能なのでデバッガが必須で、このとき、debugeeとは別の端末を使うためにttyコマンドを使う、と書いてある。なるほどね。

メモリデバッガの話題も、私が初心者のころに知りたかった。最初、私はそういうツールの使い方を知らずにヒープ破壊に悩まされて、力業で問題箇所を二分探索していたのだった。

デバッグは皆が皆、「技を盗んで自分で」覚えている領域だ。だからこそ、この手の網羅しきれなかった知識の見落としが出やすい。この本のような書籍がもっと普及すれば、きっと見落としはなくなっていくのだろう。

実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング

実践 デバッグ技法 ―GDB、DDD、Eclipseによるデバッギング