Debugging 为什么在其他文件正常的情况下,不能在某些文件中设置断点?

Debugging 为什么在其他文件正常的情况下,不能在某些文件中设置断点?,debugging,driver,windbg,breakpoints,debug-symbols,Debugging,Driver,Windbg,Breakpoints,Debug Symbols,我正在用WinDBG调试一个项目。我遇到了一个奇怪的问题: 假设驱动程序映像名为foo.sys,并且有两个名为 src_1.c和src_2.c;有一个名为void f()的函数在src_2.c中 第1步: 我使用OSRLoader成功地将foo.sys加载到内核中 第二步: 我使用命令lm检查符号是否已正确加载 kd> lm ... ... 8bad3000 8baec400 foo (private pdb symbols) d:\symbols\private\foo.pd

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

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

第1步:

我使用OSRLoader成功地将foo.sys加载到内核中

第二步:

我使用命令
lm
检查符号是否已正确加载

kd> lm
...
...
8bad3000 8baec400   foo    (private pdb symbols)  d:\symbols\private\foo.pdb
...
...
并使用命令
!itoldyouso
ti验证

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
这证明符号已正确加载

第三步:

我可以在src_1.c中的任何有效代码行设置断点

第4步:

即使关闭并重新加载src_2.c,我也无法在src_2.c中设置任何断点 从正确的位置。但是,如果我使用
bufoo!f
要在
f
上设置断点, 它起作用了

foo上设置断点之后!f
,执行将在
foo!f
as 我可以一步一步地进行源代码级调试

然而,即使我可以在src_2.c中一步一步地进行源代码级调试,我仍然 无法通过按F9在src_2.c中设置任何断点

根本原因是什么


谢谢。

如果使用F9进行设置,您会得到什么?您的源和pdb可能不同步(源已修改)。@Rohan,F9无效。kd>!itoldyouso foo d:\symbols\private\foo.pdb显示它们是同步的。
x foo!的输出是什么!f
?有火柴吗?您使用什么命令来设置src断点,或者您只是在源文件打开的情况下通过
F9
执行此操作?您是否已关闭优化功能参见此链接?