如何调试崩溃dump文件

其实调试Dump文件很简单,双击自动打开VC然后F7运行。

但是中间要注意很多事情。

 

1。Dump文件放在哪里

 

Dump文件不用非要放在你编译出来的位置,你完全可以建立一个新的文件夹来放它。

 

2。要恢复当时的现场

 

可能你要问,怎么可能,这个dump文件可是用户发给我的,我不可能去用户家里调试吧?

这个恢复现场可不是指的非要到那台机器上去,而是要把产生dump文件对应的二进制文件拿到。

 

但是恢复现场需要所有的二进制文件都要对应,你一定要有导致用户崩溃的那些Exe和Dll。既然是你发布的程序,Exe文件当然你会有。所以这里只考虑Dll就行了。

Dump文件中记录了所有dll文件的版本号和时间戳,所以你一定可以同过某种途径拿到它。如果你能从用户那里拿到最好,如果不方便,用户不可能用的是我们平常不常用的操作系统,所以找个有对应系统的机器一般都会有。但是记住不光是文件名称要一致,还要核对版本和时间戳,如果不同一样没有办法用。

 

如果客户用了某个特殊的补丁怎么办?

其实这个问题也很好解决,只要它不阻碍阅读堆栈,就不用管它,调试Dump和运行程序不一样,缺少一两个Dll没有任何问题。

 

如果真的需要怎么办?

那就看下面一节。

 

3。符号文件

 

符号文件现在主要是指PDB文件。

 

如果没有符号文件,那么调试的时候可能导致堆栈错误。

如果你丢失了这个发布里边你编译出来的那些exe和dll的PDB,那么这个损失是严重的,你重新编译出来的版本是不能使用的,乖乖的看反汇编自己猜位置吧。不过也有特殊的方法可以弥补,这里不讨论。所以一定要在发布的时候把你自己的所有PDB文件都备份起来。

 

我自己的Dll都有了,可是缺的是系统的Dll的对应PDB文件怎么办?

好办,微软在它的符号数据库上为我们提供了所有的PDB文件,还有部分非关键Dll。

 

如果你用的是2005之前的VS,可以参照调试与Symbol中的介绍使用。

如果你用的是VS2005和之后的,那么你幸运了,VS2005集成了SymbolServer的使用。在Tools->Options... 中,找到Debugging的Symbols在Symbol File (.pdb) locations 中添加一个http://msdl.microsoft.com/download/symbols,打上对号,然后在Cache symbols from symbol servers to this directory:这里找个本地的文件夹放下载下来的pdb,一切搞定。

你可以把这个Cache放在你的局域网服务器上,所有人都使用这个Cache,一来加快了所有人调试的速度,还节省了网络资源,二来这样时间长了,你自己还会欣喜自己也有了个符号库呢。

这个选项是只要你用调试模式启动程序就有效的,如果你嫌每次都去微软找Symbol很慢,而且Cache里边已经包含了你调试程序时用到的所有能从微软榨取的PDB,那么你平常只要把http://msdl.microsoft.com/download/symbols前面的对号去掉就行了。

 

4。我拿到需要的文件了,这些文件应该放在哪里?

 

符号数据库中的文件不用动,把其它的exe和dll、pdb文件放在dump文件的目录里边就行了。

 

5。我用的是VS2005,明明有源代码,为什么显示不了?

 

这个是dump调试的最头痛问题,代码可能已经改过了,即使你从svn拿到当时的版本,时间戳也是错的,VS2005就是不让你显示代码。而只要你在Options的Debugging的General里边的Require source files to exactly match the original version前面的对好去掉就行了。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值