我是一名使用 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/