正在加载.dmp文件定位错误代码,但崩溃发生在一个意想不到的地方(in ntdll.dll)

Loading .dmp file to locate the error code,but the crash occurs in an unexpected place(in ntdll.dll)

我写了一个访问 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打开它,开始debug.It出现一个显示"No Source Available" page while I have already loaded the correct ".pdb" file and set the source code path like this:set source code path的页面.

为什么会发生这种情况?我的意思是它没有 运行 进入我的函数,我只能在 "ntdll.dll" 中看到崩溃(来自堆栈框架)。但我不熟悉汇编language.Does 这个“.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的问题?

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

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