我有一个 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 发布给最终用户,但在这种情况下,为什么您希望他们看到堆栈跟踪信息?对我来说,你的目标是自相矛盾的。
从最终用户收集调试信息的最佳解决方案是通过小型转储,而不是通过在客户端上拼凑堆栈跟踪。
所以,你有几个选择:
- 使用小型转储(理想且相当常见)
- 发布 PDB(其中不会包含比您已经尝试推断的更多的信息)
- 在应用中使用内联跟踪信息,例如
__LINE__
、__FILE__
和__FUNCTION__
。 - 如果您无法拼凑出有意义的堆栈跟踪,只需捕获崩溃地址即可。
希望这有帮助!
关于c++ - 当项目在 Release模式下崩溃时如何获取函数名称和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597369/