2006年6月17日

デバッガの理論と実装

しばらく前に買ってつまみ読みしかしていなかった『デバッガの理論と実装』を最初からまとめて読みました。その名の通りデバッガの理論と実装についての解説書です。

 

本書は特定のデバッガに内容を限定せず、各種 OS のデバッガや、 Java のデバッガなど、さまざまなデバッガに関する話題を幅広く扱っています。デバッガの実装の詳細は実行環境の OS やプロセッサと密接に関わっていますが、ブレークポイントやステッピングなどのコンセプトはどのデバッガでも共通しています。

本書では、これらの基本的なデバッグ機能を実現するためのアルゴリズムや、 OS の API、プロセッサの機能について詳しく解説されています。コンパイラの最適化がデバッガに与える影響や、デバッガのマルチスレッド対応といった比較的込み入った話題も扱っています。

自分でデバッガを実装することはほとんどないと思いますが、デバッガがどのように動いているかを理解することは、デバッガを使う上で役立ちそうです。たとえば、式の評価は非常に強力な機能ですが、場合によってはデバッガ内でデバッギを殺してしまうことがあります。

デバッガの仕組みを知っていれば、なぜそのようなことが起きるのか理解できます。当たり前といえば当たり前ですが、式の評価の中でデバッギ内の関数呼び出しを行えば、何が起きても不思議ではありません。

一方、実行中のプログラムをいじる livepatch のようなハックを行うときもデバッガの知識は役立つと思います。strace や ltrace もデバッガと同様のテクニックを用いて実装されています。

なお、本書ではデバッガの特定の機能を実現するためのアルゴリズムは紹介されますが、具体的なソースコードは登場しません。実際のコードを見たい場合は GDB などのオープンソースのデバッガが参考になると思います。

デバッガの理論と実装
ジョナサン・B. ローゼンバーグ Jonathan B. Rosenberg 吉川 邦夫
アスキー (1998/02)
売り上げランキング: 42,583