0

我正在用 WinDBG 调试一个项目。我遇到了一个奇怪的问题:

假设驱动镜像名为 foo.sys,有两个源文件名为 src_1.c 和 src_2.c;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