c++ - 捕获所有异常和日志信息

标签 c++ exception-handling try-catch

我是一名使用 C++ 代码的 Java 程序员,需要一些异常处理方面的帮助。

我的代码结构如下:

try{
...
}
catch( ... ) 
{
    log("Exception occurred");
}

发生了异常,但 try block 确实很大,无法进行调试,因此我需要对代码进行最少的修改以提供有关异常的相关信息。

所以我在现有的 catch block 之前添加了以下 catch block (使用我的 Java 知识并引用 C++ 指南):

catch(exception e)
{
    log(e.what());
}

但是,我仍然收到旧消息 - “发生异常”。 try block 中的代码包含许多低级函数,如 strncpy、memcpy 等。

为什么这个 catch block 没有按预期工作?我可以做些什么来获取有关正在发生的异常以及发生在哪一行的信息,类似于 Java 如此容易提供的堆栈跟踪。

最佳答案

首先,您应该通过引用(通常是 const)进行捕获,因此您的新 catch block 应该如下所示:

try {

} catch(std::exception const& e) {
    log(e.what());
} catch(...) {
    log("Exception occurred");
}

其次,在 C++ 中,您可以抛出任何值。即使是 int 类型。如果您的代码库包含这种不明智的 throw 语句,我很同情您。

由于您来自 Java,我会检查您是否错误地使用了 throw new XXXX,它会抛出一个指针(指向动态分配的值)而不是一个值。 new 在 C++ 中是不必要的。

关于c++ - 捕获所有异常和日志信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529253/

相关文章:

c++ - 变量改变它的值

c++ - Qt - 遍历 QRadioButtons

php - 如何处理 PDO 异常

javascript - 为什么我不能捕获从 node-postgres 抛出的错误?

testing - 如何在 Selenium Junit 中使用 @Rule 使测试失败

c++ - && 运算符的交换属性问题

c++ - 是什么导致这个简单的 SDL 渲染循环中的帧速率卡顿?

c# - 捕获通用的非致命异常

c# - MailAddress:在邮件 header 中发现无效字符

Javascript无法在 map 函数中捕获错误