加载.dmp文件以找到错误代码,但崩溃发生在意外的地方(在ntdll.dll中)

时间:2017-11-22 01:41:23

标签: c debugging visual-studio-2015 minidump

我写了一个函数来访问一个像这样的NULL指针:

CORRUPTDLL_API int fncorruptDLL(void)  
{   
    int *p = NULL;   
    printf("%d\n", p[0]);   
    return 0;    
}

然后在main函数中调用此函数,如下所示:

int main()
{
    fncorruptDLL();
    return 0; 
}

正如预期的那样,它打破了" printf"功能,我可以清楚地看到堆栈框架crash place中的崩溃位置。

然后我使用" Windbg"创建一个" .dmp"文件并用VS2015打开它,开始调试。结果显示一个页面显示" No Source Available" page虽然我已经加载了正确的" .pdb"文件并设置源代码路径,如下所示:set source code path

为什么会发生这种情况?我的意思是它没有碰到我的功能,我只能看到" ntdll.dll"(来自堆栈框架)的崩溃。但我不熟悉汇编语言。这个" .dmp"文件真的有用吗?

我使用了" adplus"监视可摘文件

C:\Program Files (x86)\Debugging Tools for Windows (x86)\adplus.exe -crash -pmn winDgb_Test.exe  -FullOnFirst -o D:\VSproject\case-201710\winDgb_Test\Debug\dum

但是当程序崩溃时,它并没有产生任何" .dmp" file.What的问题是什么?

1 个答案:

答案 0 :(得分:0)

当您开始调试可执行文件并在调试器下启动该可执行文件时(在WinDbg:File / Open Executable中),程序将尽可能短,然后停在initial breakpoint (MSDN)

目前,您可以设置调试器,例如定义异常行为,添加断点,加载扩展等。完成后,按g让程序运行。然后重现崩溃,然后创建崩溃转储。