Sha*_*ala 5 c++ exception-handling try-catch
我是一名使用 C++ 代码的 Java 程序员,需要一些异常处理方面的帮助。
我有以下结构的代码:
try{
...
}
catch( ... )
{
log("Exception occurred");
}
Run Code Online (Sandbox Code Playgroud)
发生了异常,但 try 块确实很大,而且调试不是一种选择,因此我需要最少地修改代码以提供有关异常的相关信息。
所以我在现有的 catch 块之前添加了以下 catch 块(使用我的 Java 知识并参考 C++ 指南):
catch(exception e)
{
log(e.what());
}
Run Code Online (Sandbox Code Playgroud)
但是,我仍然收到旧消息 - “发生异常”。try 块中的代码包含许多低级函数,例如strncpy, memcpy等。
为什么这个catch块没有按预期工作?我该怎么做才能获取有关正在发生的异常以及在哪一行上的信息,类似于 Java 轻松提供的堆栈跟踪。
首先,你应该通过引用捕获(通常是 const),所以你的新catch块应该是:
try {
} catch(std::exception const& e) {
log(e.what());
} catch(...) {
log("Exception occurred");
}
Run Code Online (Sandbox Code Playgroud)
其次,在 C++ 中,您可以抛出任何值。甚至类型int. 如果您的代码库包含此类不明智的throw语句,我很同情您。
由于您来自 Java,我会检查您是否错误地使用了 a throw new XXXX,它会抛出一个指针(指向一个动态分配的值)而不是一个值。的new是用C ++不必要。
您必须调试并确定异常是否是 C++ 异常。
请注意,除以等0是 C++ 不支持的运行时异常,因此它可以是字面上的任何内容。
捕获所有的处理程序只会捕获有效的 C++ 异常,而不是所有异常(可能很多)。