捕获所有异常并记录信息
Catching all exceptions and logging information
我是一名使用C++代码的Java程序员,需要一些异常处理方面的帮助。
我有以下结构的代码:
try{
...
}
catch( ... )
{
log("Exception occurred");
}
发生了异常,但try块确实很大,调试不是一种选择,所以我需要最低限度地修改代码以提供有关异常的相关信息。
所以我在现有的 catch 块之前添加了以下 catch 块(利用我的 Java 知识并参考C++指南):
catch(exception e)
{
log(e.what());
}
但是,我仍然收到旧消息 - "发生异常"。try 块中的代码包含许多低级函数,如strncpy, memcpy
等。
为什么这个catch
块没有按预期工作?我该怎么做才能获取有关正在发生的异常以及在哪一行上的信息,类似于 Java 如此容易给出的堆栈跟踪。
首先,你应该通过引用(通常是 const)捕获,所以你的新catch
块应该读作:
try {
} catch(std::exception const& e) {
log(e.what());
} catch(...) {
log("Exception occurred");
}
其次,在C++中,你可以抛出任何值。即使是int
型.如果你的代码库包含这样不精明的throw
语句,我可怜你。
由于您来自Java,我会检查您是否错误地使用了throw new XXXX
,该会抛出指针(指向动态分配的值)而不是值。C++中不需要new
。
可能是因为这些异常不是从exception
类派生的。在C++任何类型都可以是例外,例如string
、int
等。无论如何,如果你想抓住exception
你可能应该抓住对exception &
的引用。
您必须调试并确定异常是否是C++异常。
请注意,除以0
等是C++不支持的运行时异常,因此它可以是字面上的任何内容。
捕获全部处理程序将仅捕获有效C++异常,而不是所有异常(这可能很多)。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 将两个数组中的差异记录在第三个数组中
- 如何设置一个范围来提取我想要获得的信息
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 为什么 gcovr 会生成空覆盖率统计信息?
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- Qt 错误:QSqlQuery::value:尝试从表中检索统计信息时未定位在有效记录上 (QComboBox)
- 使用流在C++中记录信息
- 我正在尝试用 c++ 制作一个日志记录框架,但信息没有传递给记录器的子组件,我做错了什么?
- 如何在文本文件中搜索员工记录(按名称)并仅显示其详细信息?
- QApplication::activeWindow()->windowTitle();保存此信息以每秒记录一次
- 捕获所有异常并记录信息
- Poco::Logger 不记录跟踪或调试级别日志,只记录信息级别及以上
- Windows Phone 8.1运行时-如何获取呼叫信息,如传入和传出呼叫的历史记录
- 创建一个二进制文件,向其中添加信息,并从中读取所有记录(电话簿)
- 如何检索或打印"Catch"信息记录缓冲区?
- 如何使信息记录更容易
- 记录器在崩溃后没有将记录的信息存储到文件中