这篇文章描述了如何正确读取应用程序的终端用户发送的错误报告以及从 minidump 文件中正确恢复调用堆栈的步骤。

在发布之前,建议检查应用程序的主线程和所有工作线程中是否正确拦截了异常(使用 crEmulateCrash() 函数)。

当你准备发布软件时,你应该保存它的二进制文件、调试信息(symbols 符号)和源代码。当出现崩溃报告时,你使用发布版本、源代码和你保存的 symbols 符号,以及崩溃报告中包含的 minidump 文件来调试崩溃。

保存二进制文件、调试信息和源代码

首先,你需要保存二进制文件(*.EXE, *.DLL)和相应的调试符号(*.PDB文件)。为此,按项目名称创建一个目录。例如,如果你开发的项目“MyApp”,命名你的目录“MyApp”。在该目录中为你的新软件版本创建一个子目录,例如'1.0.0'。

然后复制所有二进制文件(*.EXE, *.DLL)和所有调试符号文件(*.PDB文件)从项目输出复制到你刚刚创建的目录。

注意:还建议你复制 CrashRpt 二进制文件和调试符号。这有助于确保你能够从 minidump 文件中正确地恢复调用堆栈。

最后,你应该有以下目录结构(在下面的示例中,XXXX 是 CrashRpt 版本的占位符):

  MyApp\
      1.0.0\
          MyApp.exe
          MyApp.pdb
          ...
          CrashRptXXXX.dll
          CrashRptXXXX.pdb

还建议你保存用于编译应用程序的源代码。如果你使用版本控制系统(例如,SVN,Git),请用 tag 标记代码的当前修订,以便以后能够恢复其状态。

注意:您复制的文件应该在软件生命周期内存储。PDB 文件不应该包含在软件发行版中,也不应该发送给终端用户。你不应该发布 PDB 文件,因为它们不仅会占用更多的空间,而且还会使代码的逆向工程变得更容易。

在软件发行版中包含 CrashRpt 文件

你必须在你的软件中分发以下文件(XXXX 是 CrashRp t版本的占位符):

  • CrashRptXXXX.dll
  • CrashSenderXXXX.exe
  • dbghelp.dll

CrashRptXXXX.dllCrashSenderXXXX.exe 是核心 CrashRpt 模块, dbghelp.dll (Microsoft Debug Help Library) 是依赖模块。

建议你将这些文件放置到应用程序可执行文件所在的目录中。

还需要将语言 INI 文件 crashrpt_lang.ini 复制到 CrashSenderXXXX.exe 所在的文件夹中。你可以在你的软件中分发多个语言 INI 文件。安装时,将适当的文件重命名为 crashrpt_lang.ini,并将其复制到 CrashSenderXXXX.exe 所在的文件夹中。有关语言文件的其他信息,请参阅上篇文章国际化支持部分。

标签: CrashRpt, CrashFix, 崩溃收集, 崩溃分析

添加新评论