正在加载.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
让程序 运行。然后重现崩溃,然后创建故障转储。
我写了一个访问 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
让程序 运行。然后重现崩溃,然后创建故障转储。