Richard M. Stallman、Roland H. Pesch 著 (株)コスモ・プラネット 訳
(株)アスキー発行 ISBN 4-7561-3016-X 1900円(本体)
GDBには今までどんなにお世話になったか分からない。Linuxに限らず、UNIX上でCやC++のプログラムを組む人は、長い間 gcc、g++、gdbのGNUのソフトを使って開発してきました。商用ソフトウェアの開発で、最終的に利用するコンパイラあるいはデバッガがこれらでなくても、開発中はずっとこれらで行ない、最後の最後だけ指定の開発ツール類を使うことは多いものです。
GDBはデバッガですが、非常に機能が高い。私が今まで利用した例としては、X端末用のXサーバに手を入れて、そのデバッグに使ったことがあります。Xのイベントを詳細にチェックしていく訳ですから、高機能でなければいけません。デバッグすべきXサーバが動いている端末上にGDBの表示を行なうと大混乱になるので、別の端末からXサーバのデバッグをしました。
最近使った例としては、サーバが次々にforkした子プロセスの中のデバッグでした。GDBはforkされて走りだしたプログラムを捕まえることができるので、とても便利です。調べ終えたら、解き放すこともできます。
本書には入門という語が含まれていますが、原書の題名は“Debugging with GDB” で、入門に相当する単語は見つかりません。実際、書き方は延々とGDBの機能を説明してあるだけで、初心者のための説明と感じられるところはまったくありません。要するに、マニュアルそのものです。ほぼ全部が文章だけによる説明で、説明を補強するための例すらわずかしかありません。実際のGDBによるデバッグ例は1章の5ページだけです。
必要なことはちゃんと書かれていますが、すでにGDBに慣れているか、同様の機能のデバッガの経験者でないと分からないと思われることばかりです。C言語の勉強は、K&Rの『プログラミング言語C』で充分な人には、GDBの説明書も、この本で充分だと思います。しかし、デバッガの勉強をこれでしようと思う人には相当難しい本です。操作例もないので、自分のやりたいことと説明から、実際のコマンドを組み立てられる能力が要求されます。
Cプログラミングの本はたくさんありますが、実際のデバッグ手順を丁寧に書いた本はまだ見たことがありません。printfを入れて値を表示させながらデバッグする方法などが本ではしばしば紹介されていますが、最悪のデバッグ方法です。本での説明という特殊な状況ではやむを得ない場合もありますが、ソースにはいっさい手を加えず、デバッガの機能を使って可能な限り調べるのが普通です。プログラミング言語について教えても、デバッグノウハウを教えないのは、ブレーキを教えずに車を運転させるような無茶苦茶なプログラミング教育です。
GDBの操作は、10年以上前に習得して以来、忘れたときはヘルプを利用して調べる程度でしたが、本としてまとまったものを見ると、知らないことも多々あり、ずいぶん進歩してきたものだと感心させられました。少しは新機能も使いこなせるよう練習し、今後も長くつき合うことになりそうです。