WinDBG を使用してプロジェクトをデバッグしています。私は奇妙な問題に出くわしました:
ドライバー イメージの名前が foo.sys で、src_1.c と src_2.c という名前の 2 つのソース ファイルがあるとします。void f();
src_2.c で名前が付けられた関数があります。
ステップ1:
OSRLoader を使用して foo.sys をカーネルに正常にロードします。
ステップ2:
コマンドlm
を使用して、シンボルが正しく読み込まれたかどうかを確認します
kd> lm
...
...
8bad3000 8baec400 foo (private pdb symbols) d:\symbols\private\foo.pdb
...
...
コマンド!itoldyouso
ti verifyを使用します
kd> !itoldyouso foo d:\symbols\private\foo.pdb
foo.sys
Timestamp: 526DC759
SizeOfImage: 19400
pdb: f:\projects\foo\objchk_wxp_x86\i386\foo.pdb
pdb sig: 851C2562-6FE3-4391-88C6-320253CC3372
age: 1
foo.pdb
pdb sig: 851C2562-6FE3-4391-88C6-320253CC3372
age: 1
これは、シンボルが正しく読み込まれたことを証明します。
ステップ 3:
src_1.c の任意の有効なコード行にブレークポイントを設定できます。
ステップ 4:
src_2.c を閉じて正しい場所から再読み込みしても、src_2.c にブレークポイントを設定できません。ただし、にbu foo!f
ブレークポイントを設定するために使用するとf
、機能します。
にブレークポイントを設定すると、期待どおりfoo!f
に実行が中断さfoo!f
れ、ソースレベルのデバッグを段階的に実行できます。
ただし、src_2.c で段階的にソースレベルのデバッグを行うことはできますが、F9 を押しても src_2.c にブレークポイントを設定することはできません。
根本的な原因は何ですか?
ありがとう。