`ls`命令在windbg中没有按预期工作

时间:2014-07-16 23:41:57

标签: windbg

我正在调试一段代码,我让它在异常时打破。我设置了相关的源和符号路径,但是当我使用ls时,它不会显示或列出当前的源文件,即使它突出显示了开源文件中的行我也是如此。我选择正确的堆栈框架时感兴趣。

为什么?我不明白的是什么?当前源文件'是什么意思?

1 个答案:

答案 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: {