是否有一个与Java等价的c++
try {
...
}
catch (Throwable t) {
...
}我正在尝试调试调用本地windows函数的Java/jni代码,但虚拟机总是崩溃。本机代码在单元测试中看起来很好,并且似乎只有在通过jni调用时才会崩溃。一个通用的异常捕获机制将被证明是非常有用的。
发布于 2008-11-25 00:22:53
try{
// ...
} catch (...) {
// ...
}将捕获所有C++异常,但这应该被认为是糟糕的设计。您可以使用c++11的新current_exception机制,但是如果您不能使用c++11(需要重写的遗留代码系统),那么您就没有命名异常指针可用来获取消息或名称。您可能希望为可以捕获的各种异常添加单独的catch子句,并且只捕获底部的所有内容以记录意外的异常。例如:
try{
// ...
} catch (const std::exception& ex) {
// ...
} catch (const std::string& ex) {
// ...
} catch (...) {
// ...
}发布于 2008-11-25 01:07:30
有人应该补充说,在C++代码中无法捕获“崩溃”。这些不抛出异常,但可以做任何他们喜欢的事情。当你看到一个程序因为空指针取消引用而崩溃时,它就是在做未定义的行为。没有std::null_pointer_exception。在这一点上,尝试捕获异常是没有帮助的。
只是为了以防万一,有人正在阅读这个帖子,并认为他可以找到程序崩溃的原因。应该使用像gdb这样的调试器。
发布于 2014-06-10 21:19:16
这就是你如何从catch(...)中对异常类型进行逆向工程,如果你需要使用GCC(在从第三方库中捕获未知时可能会很有用):
#include <iostream>
#include <exception>
#include <typeinfo>
#include <stdexcept>
int main()
{
try {
throw ...; // throw something
}
catch(...)
{
std::exception_ptr p = std::current_exception();
std::clog <<(p ? p.__cxa_exception_type()->name() : "null") << std::endl;
}
return 1;
}如果你能负担得起使用Boost,你可以使你的捕获部分更简单(在外部),并且有可能是跨平台的
catch (...)
{
std::clog << boost::current_exception_diagnostic_information() << std::endl;
}https://stackoverflow.com/questions/315948
复制相似问题