我正在调试一段代码,我让它在异常时打破。我设置了相关的源和符号路径,但是当我使用ls
时,它不会显示或列出当前的源文件,即使它突出显示了开源文件中的行我也是如此。我选择正确的堆栈框架时感兴趣。
为什么?我不明白的是什么?当前源文件'是什么意思?
答案 0 :(得分:1)
如果您所在的地址中没有源文件(例如_dbgbreakpoint
上的ntdll
),则发出ls
将发出消息"没有当前源文件" :
0:000> ln @eip
(7c90120e) ntdll!DbgBreakPoint | (7c901212) ntdll!DbgUserBreakPoint
Exact matches:
ntdll!DbgBreakPoint = <no type information>
0:000> ls
No current source file
ls
本身需要使用lsf
预加载的源文件,或者您需要设置.srcpath
。
此加载的源文件将保持加载状态,直到您将其删除或由事件自动加载其他源文件(即,如果您执行.restart
并中断_dbgbreak
并执行ls
,它将显示之前加载lsf
的陈旧源文件:
0:000> .restart
ntdll!DbgBreakPoint:
7c90120e cc int 3
0:000> ls
77: PAttributeHeader psecondheader = NULL ;
78: PAttributeHeader pthirdheader = NULL;
79: PFileInfoAttributeRecord pfinforecord = NULL;
80:
81: memset(&dump,0,sizeof(dump));
82: fopen_s( &fp,"\\\\.\\PHYSICALDRIVE0", "rb" );
使用lsa .
(注意.
)代替ls
,它会加载当前地址的来源。
当前行在下面的粘贴中用>
表示。
注意ls
由于没有预先加载的源文件而失败,而lsa .
会为您提供源代码行。
0:000> g wmain
00401000 55 push ebp
0:000> ls
No current source file
0:000> lsa .
67: }FileInfoAttributeRecord,*PFileInfoAttributeRecord;
68:
69:
70: int _tmain(int argc, _TCHAR* argv[])
> 71: {