c++简单的崩溃日志
C++ simple crash logging
我正在为一个3D应用程序编写一个插件(基本上是一个dll),偶尔会出现崩溃。有时这些很难找到,我想投入一些时间来制作(或集成一个现有的)崩溃记录器,它将
- 给我一个堆栈跟踪。
- 给我一个本地变量列表
- 将这些条目转储到文件中,或者上传到指定的URL。
我找到了下面的网站,详细介绍了如何在c++中获得堆栈跟踪。但我不确定这是否能在远程系统上工作。我猜这将需要是调试版本,并提供pdb文件为此工作?至于获得局部变量,我还没有设法找到任何东西。有人知道有什么资源可以帮上忙吗?
这篇文章虽然写于2002年,但仍然与事后调试相关。它向您展示了使其工作所需的所有原因、步骤和设计。
现在,它更容易(虽然我喜欢Windbg!)你让你的应用程序调用SetUnhandledExceptionFilter
并编写。dmp文件,然后只需双击它加载到Visual Studio中。在调试系统中,你需要好的符号(.pdf文件)来理解转储,但是创建你自己的符号服务器(文章中的说明,非常简单),它应该能够找出任何应用程序需要哪些符号。你必须严格遵守保存符号的规则——错误的符号比无用的符号更糟糕。
这个问题相当老了,但是关于异常,我想指出的是,您可以通过跨平台的方式获得很好的回溯,只使用标准c++ 11,而不需要调试器或繁琐的日志记录:
使用std::nested_exception
和std::throw_with_nested
在这里和这里的StackOverflow上描述了如何通过简单地编写一个适当的异常处理程序来重新抛出嵌套异常,从而在代码中获得异常的回溯。但是,它将要求您在希望跟踪的函数中插入try/catch
语句。
由于您可以对任何派生异常类执行此操作,因此您可以向此类回溯中添加大量信息!你也可以看看我在GitHub上的MWE或我的"trace"库,其中的反向跟踪看起来像这样:
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"
关于局部变量,在这种方法中,您必须手动将希望以某种形式打印的变量放入异常或异常消息中,这将非常麻烦…
将你记录的内容写入文件并将其上传到某处是另一个问题,对此我没有任何具体的建议。
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 磁盘已满时,Boost日志崩溃
- 应用程序崩溃 C++/MFC 的通用日志
- c++简单的崩溃日志
- 如何保护日志免受应用程序崩溃
- QWebView应用程序在加载(使用日志)和绘制时崩溃
- 崩溃检测,日志记录和c++
- 监视日志文件(C++)时崩溃