![]() | デバッガの理論と実装 (ASCII SOFTWARE SCIENCE Language) Jonathan B. Rosenberg 吉川 邦夫 アスキー 1998-02 売り上げランキング : 59943 Amazonで詳しく見る by G-Tools |
琴線にふれたところ。
ソースコードが直接実行されているかのような錯覚を与えることにある。そうするためのトリックは、ソースコードに関して、また、それがどのように機械語命令にマップされているかについて、コンパイラに徹底したデバッグ情報を提供させることである。
Microsoftなどのベンダーは、デバイスドライバ開発者のために、OSを2種類提供している。その1つは市販のバージョンで、完全に最適化され、デバッグ用のシンボル情報を持たない。もう1つは、Microsoftが「チェックされた」ビルドと呼んでいるもので、最適化を外すかそのレベルを下げるかした、完全なデバッグシンボル付きのビルドであり、デバッグ中に詳細なスタックトレースや主要な変数の調査ができるようになっている。ハードウェアによるデバッグサポート
- ブレークポイント
- シングルステップ実行
- 例外の検出
- ウォッチポイント
- マルチスレッドの制御
- マルチプロセッサの制御
デバッガは、現在のプロラムカウンタの位置にある命令をデコードし、正確にその次の命令の位置にブレークポイントを設定し、デバッギを通常どおりに実行させることによって、シングルステップをシミュレートすることができる。ウォッチポイント
プロセッサにベースとリミットのレジスタを持たせ、それらで開始アドレスと範囲を指定する方法である。こうすればプロセッサ自身が、このアドレス領域内でのデータの書き換えをストップし、その書込みが行われる前に実行を停止することができる。Win32のデバッグAPI
フラグを立ててCreateProcess()または、既存プロセスにDebugActiveProcess()
各スレッドのレジスタ値はGetThreadContext()、状態変更はSetThreadContext()
ブレークポイントやコードのパッチはReadProcessMemory()、WriteProcessMemory()
デバッギの状態変化をWaitForDebugEvent()で待つ。
0 件のコメント:
コメントを投稿