c++ - 当项目在 Release模式下崩溃时如何获取函数名称和行号

标签 c++ debugging mfc crash

我有一个 C++/MFC 项目

当我在 Debug模式下运行它并且项目崩溃时 我可以获得代码的函数和行号 使用 SetUnhandledExceptionFilter 函数 但在 Release模式下我无法获取它

我正在测试这个函数和源码

_set_invalid_parameter_handler msdn.microsoft.com/en-us/library/a9yf33zb(v=vs.80).aspx

StackWalker http://www.codeproject.com/KB/threads/StackWalker.aspx

MiniDumpReader 和 crashrpt http://code.google.com/p/crashrpt/

StackTracer www.codeproject.com/KB/exception/StackTracer.aspx

当项目在 Release模式下崩溃时获取函数和代码行的任何方法 不需要 pdb 文件或映射文件或源文件?

最佳答案

PDB 文件旨在为您提供此信息;缺陷是您不需要 PDB 文件。我可以理解不想将 PDB 发布给最终用户,但在这种情况下,为什么您希望他们看到堆栈跟踪信息?对我来说,你的目标是自相矛盾的。

从最终用户收集调试信息的最佳解决方案是通过小型转储,而不是通过在客户端上拼凑堆栈跟踪。

所以,你有几个选择:

  1. 使用小型转储(理想且相当常见)
  2. 发布 PDB(其中不会包含比您已经尝试推断的更多的信息)
  3. 在应用中使用内联跟踪信息,例如 __LINE____FILE____FUNCTION__
  4. 如果您无法拼凑出有意义的堆栈跟踪,只需捕获崩溃地址即可。

希望这有帮助!

关于c++ - 当项目在 Release模式下崩溃时如何获取函数名称和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597369/

相关文章:

c++ - 移动一组共面点的简单程序不起作用

arrays - Extendscript 调试数组

debugging - 我可以在 IntelliJ Idea 中停止自定义循环迭代吗?

c++ - OpenGL 库未链接

c# - 使用 SendMessage 拖放

c++ - Visual Studio 断点宏修改一个值?

c++ - 为来自不同进程的窗口设置父级是否正确?

c++ - 如何绘制禁用图标

c++ - 在 WPF、wxWidgets、Win32 API 和 MFC 之间进行选择

C++ raytracer 不将值写入位图