是否有Java的c ++等价物
try {
...
}
catch (Throwable t) {
...
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试调试调用本机Windows函数的Java/jni代码,并且虚拟机不断崩溃.本机代码在单元测试中看起来很好,并且在通过jni调用时似乎只会崩溃.一般的异常捕获机制将证明是非常有用的.
昨天我和同事讨论了什么是首选的错误报告方法.主要是我们讨论了异常或错误代码的使用,以报告应用程序层或模块之间的错误.
您使用什么规则来决定是否抛出异常或返回错误代码以进行错误报告?
我编写了一个简单的应用程序,它读取数据文件,解析文本,然后对该数据进行一些处理.数据文件在main()函数中打开.如果确定文件未正确打开,使用exit()函数是否是一种很好的编程习惯?例如:
if (!file.is_open() ){
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
此外,我的程序有一个单独的函数来解析文件中的数据.main()调用此函数.如果函数在数据中发现错误,我希望程序在打印错误消息后停止.在这种情况下,在我的解析函数中使用exit()函数是否可以接受?我问这个问题是因为,对我来说,允许一个函数自己退出程序而不将控制返回到main()函数似乎并不是很整洁.(如果这个问题看起来非常明显,我道歉.我是C++和编程的新手).
我在项目中找到了一些看起来像这样的代码:
int main(int argc, char *argv[])
{
// some stuff
try {
theApp.Run();
} catch (std::exception& exc) {
cerr << exc.what() << std::endl;
exit(EXIT_FAILURE);
}
return (EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会有例外.如果不是,则应用程序将退出并打印异常.
你认为有什么好理由在这里捕捉异常吗?
编辑:我同意打印异常错误是好的.但是,重新抛出异常不是更好吗?我觉得我们在这里吞咽它...
在库中,我有一个函数,它在数据库中搜索一个键并返回一个对象的非const引用.我想处理找不到密钥的情况,这通常是由调用函数时的错误引起的.这种情况非常糟糕,程序无法继续,所以我打印一条消息,以帮助发现错误和调用exit(1).问题在于return语句在这种情况下永远不会执行,但无论如何都必须在那里.如果它是一个指针,我可以只return nullptr;用一个参考?我应该做这样的伪代码吗?
Type & get(const Key & k) {
if (my_db.key_exists(k)) {
return my_db.at(k);
}
std::cerr << k << " not found\n";
exit(1);
return *(new Type(some_dummy_parameters));
}
Run Code Online (Sandbox Code Playgroud)
它看起来很糟糕!也许我应该避免这样的功能.拜托,让我知道你的意见!