今さらながらに読んだ。
http://www.hondana.org/shinichiro.h/4756117457.html
面白かった。でももう少し薄くしてくれても良かったんじゃないかとか。この本の読者であればそんな詳細な説明はいらなかろう、というアルゴリズムが詳説されてたりしたので。
私的に要点だと思ったのは、
という3点。以下その応用やらで面白かったこと。
デバッグ情報のある部分から、デバッグ情報の無い関数に入りその中からまたデバッグ情報がある関数がコールバックで呼ばれる場合の、ステップ実行。 a() => b() => c() と呼ばれて、 a と c はデバッグ情報がある場合、 a() 内のステップ実行は c() の最初で止まって欲しい。でもデバッガには c() の開幕で止まるべきと知る方法が無い。どうするか。デバッグ情報のあるコード全てにメモリ保護をかけるそうな。
最適化されたコードのデバッグは極めて難しい。どうしようもないと言っていいくらい。スレッドも大変。巻末の「将来のトレンド」という項はほとんど現代でも実現されてないんじゃなかろうか。分散オブジェクトとか。97年の本らしいが。
あなたがデバッガのバグだと思ったものの多くはコンパイラのバグだ。デバッガ屋はがんばってるんだ。OS屋もコンパイラ屋もデバッガのこと考えるのは後回しにするからひどいやひどいや…