0

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
...
...

コマンド!itoldyousoti 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 にブレークポイントを設定することはできません。

根本的な原因は何ですか?

ありがとう。

4

0 に答える 0