我写了一个函数来访问一个像这样的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的问题是什么?
答案 0 :(得分:0)
当您开始调试可执行文件并在调试器下启动该可执行文件时(在WinDbg:File / Open Executable中),程序将尽可能短,然后停在initial breakpoint (MSDN)。
目前,您可以设置调试器,例如定义异常行为,添加断点,加载扩展等。完成后,按g
让程序运行。然后重现崩溃,然后创建崩溃转储。