Technique_Diagnosis
blizmax6
______Max
展开
-
调试Release发布版程序的Crash错误(一)
在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了。因为release版本来就少了很多调试信息,更何况一般都是发布出去由用户使用,crash的现场很难保留和重现。本文将给出几个解决方案,完成对release版应用程序crash错误的调试。(本文只讨论Windows平台MSVC环境下的调试,转载 2011-06-30 00:22:00 · 448 阅读 · 0 评论 -
调试Release发布版程序的Crash错误(四)
前面几个方案都是直接定位crash的代码位置,但是在比较大型的程序中,只知道这个信息还是远远不够的,我们希望知道更多关于调用函数顺序及变量值等信息,也就是crash时调用堆栈信息。 方案四:SetUnhandledExceptionFilter +StackWalker 这个方案需要自己动手往工程里添加代码了。要实现上面的想法,需要做两件事情:1、需要转载 2011-06-30 00:25:00 · 513 阅读 · 0 评论 -
调试Release发布版程序的Crash错误(六)
上一篇我们已经给出了方案,能够非常方便的通过dump文件对crash错误进行调试和定位;从整个流程上看还差最后一步,即怎样拿到crash时产生的dump文件。如果可以让用户把文件发送过来自然不错,但对于类似免费共享软件等在互联网上发布的程序呢?我们的用户是不确定的,而且用户量有可能非常大,即使我们能想办法联系到用户,总不能挨个去收集crash信息吧。 我们需要一种方案,转载 2011-06-30 00:27:00 · 600 阅读 · 0 评论 -
调试Release发布版程序的Crash错误(三)
根据前面两篇博文,我们要定位崩溃行代码,必须要自己根据相关信息文件进行计算。如果需要处理的量比较大,恐怕会很费力气。有没有更简单快速的办法呢? 最直接的想法就是写一个小工具,根据规则和信息进行自动定位,不过开发起来也是要费一番功夫的。令人开心的是,我们可以找到类似的工具,而且是开源免费的!程序员的世界也许很多时候都是这么单纯而乐于分享! 方案三:崩溃地址 + PD转载 2011-06-30 00:24:00 · 597 阅读 · 0 评论 -
调试Release发布版程序的Crash错误(二)
上篇给出的方案一还要补充几句。通过“crash地址 +MAP文件”来定位出错代码位置虽然需要经过比较复杂的地址计算,但却是最简单实现的方式。如果仅仅想通过崩溃地址定位出错的函数,就更加方便了。我在网上找到一个解析MAP文件的小工具,可以非常清晰的列出每个函数的地址,并且可以将分析表格导出为Excel文件。工具下载地址:http://e.ys168.com/?tinyfun,工具目录转载 2011-06-30 00:24:00 · 438 阅读 · 0 评论 -
调试Release发布版程序的Crash错误(五)
当我们把自己的release版本程序发布出去以后,一般都是在用户的机器上运行。这种情况下,对于第四种方案,因为需要pdb文件才能够正确生成堆栈调用的函数行号及代码行号,因此方案四只适用于本地release版的调试,否则只能生成不完整的堆栈信息。对于前三种方案,其实只需要用户告知崩溃地址,然后在本地查找crash地址就可以了,但是定位crash的过程非常不方便,如果crash的情况比较多,前转载 2011-06-30 00:26:00 · 564 阅读 · 0 评论