none
一个关于如何定位程序崩溃处的想法 RRS feed

  • 问题

  •        这里的程序崩溃不是指在开发环境下崩溃,而是一般是在开发环境下运行正常,而在实际上生产环境下崩溃,甚至有更诡异的是在实际生产环境中也不是全部机器崩溃,而是在特定的一台或几台机器上崩溃。由于在实际生产环境中缺乏调试环境,往往很难调试这种崩溃。因此定位这类崩溃成了一个老大难问题。

            我查看了网上的一些资料,解决方案就是在崩溃时生产转储文件,然后用windbg或google breakpad进行定位。这个解决方案有一些严重弊端:一是需要将转储文件拷贝出来,要知道在国内一些保密单位(比如军队),文件是很难拷贝出来的;二是崩溃难以重现,因为如前文所述崩溃有时在特定的机器上出现的,很多时候缺乏相应的测试数据也很难重现崩溃(有时因为保密原因测试数据是基本不可能拷贝出来的)。

           为此我设想了一个办法:设计一种只保存崩溃代码对应的obj文件名和代码行号的转储文件。比如release版本崩溃了,开发人员提供一个可以生成转储文件的release版本来替换原来的版本,然后操作人员在实际生产环境中重现崩溃生成转储文件,转储文件不用拷贝出来,直接用开发人员提供的转储文件查看工具打开转储文件来查看崩溃代码是哪个obj和对应的行号,查到后把结果告诉开发人员,这样开发人员找到对应行号的cpp文件就大致知道导致崩溃的原因了。

            现在的问题是我的设想理论上是否可行呢,就是转储文件能否只保存崩溃代码对应的obj文件名和代码行号。

    前无古人,后无来者

    2019年2月11日 7:34

全部回复