+ -
当前位置:首页 → 问答吧 → windbg 看dump堆栈信息

windbg 看dump堆栈信息

时间:2011-11-30

来源:互联网

不知道大家有没有遇到过。

当一个程序报错之后,我们会生产一个dump文件。
但是通过windbg+对应程序的pdb的时候,总是不能很准确的定位到错误的位置。
而且调用堆栈的话很莫名其妙的,不知所云。

请问我该如何操作?

作者: wenh7788   发布时间: 2011-11-30

可能是堆栈被破坏得太严重了。如果不是:
不要管pdb,直接用k命令看Call Stack上指明的地址处的汇编代码,然后在exe或dll里面直接搜对应的汇编代码出现的位置,……。

也可以不用WinDbg,在程序报错弹出的对话框上选取消,直接进入VS IDE,按Alt+7键打开Call Stack窗口
查看里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
之前可能要重装VS IDE或者设置注册表项
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
"Auto"="0"
"Debugger"="\"C:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin\\msdev.exe\" -p %ld -e %ld"

作者: zhao4zhong1   发布时间: 2011-11-30

我按照您说的方法 直接用windbg打开之后 输入 k ,发现他的调用堆栈是在创建dump文件的代码附近的一些堆栈。

可是 没有报错的话,也不会进入到创建dump的地方啊。感觉不完整的说。

还有什么方法吗?
麻烦了!

作者: wenh7788   发布时间: 2011-11-30

你的WinDBG什么版本,有个版本加载pdb好像是有问题的。

作者: healer_kx   发布时间: 2011-11-30

符号文件是否匹配?

作者: ouyh12345   发布时间: 2011-11-30

符号表匹配

其实符号表匹配不匹配都不所谓,但是堆栈看得不全啊。

版本号:6.11.0001.404 X86

作者: wenh7788   发布时间: 2011-11-30

现在没有对应dump文件的程序了,只有dump文件,而且报错不容易重现,不定时的会报错,只有从崩掉的dump文件上来看调用堆栈,到底是什么地方崩掉了,请问大家有啥办法吗?

作者: wenh7788   发布时间: 2011-11-30

用r命令查看出错的最后一条汇编指令,然后在相应dll里面搜索这条指令出现在哪个位置,再看这个位置位于哪个导出函数的函数体里面,再猜谁调用这个导出函数的时候参数非法,……

作者: zhao4zhong1   发布时间: 2011-11-30