Debugging 为什么在其他文件正常的情况下,不能在某些文件中设置断点?
我正在用WinDBG调试一个项目。我遇到了一个奇怪的问题: 假设驱动程序映像名为foo.sys,并且有两个名为 src_1.c和src_2.c;有一个名为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
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
执行此操作?您是否已关闭优化功能参见此链接?