为什么在其他文件没问题的情况下不能在某些文件中设置断点?

时间:2013-10-28 02:21:11

标签: debugging driver windbg breakpoints debug-symbols

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

假设驱动程序映像名为foo.sys,并且有两个名为的源文件 src_1.c和src_2.c; src_2.c中有一个名为void f();的函数。

第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!ff上设置断点, 它有效。

foo!f上设置断点后,执行将在foo!f处断开 预期,我可以逐步进行源级调试。

但是,即使我可以在src_2.c中逐步进行源代码级调试,我仍然如此 不能通过按F9在src_2.c中设置任何断点。

根本原因是什么?

感谢。

0 个答案:

没有答案