[英]c++ uncaught exceptions on osX
我开发的c ++库有一个问题:我定义了自己的异常类(基本上只包含要返回what()调用的字符串),当未捕获到异常时,目标是操作系统将从what()打印消息并终止。 这在Linux上运行良好,但在osX上,未显示异常消息(即,它直接终止而不打印任何内容)。
因此,我是否正确地假设未捕获的异常会导致what()之后终止? 我应该在osX上做什么以便显示该消息? (知道我不喜欢设置异常处理程序的想法,因为这强加了库的用户执行此操作)
谢谢! 马蒂亚斯
在所有操作系统上:在main()
捕获异常并打印出适当的消息。 如果您不了解它,则不确定析构函数是否在出口运行。 你真的想要那个吗?
因此,我是否正确地假设未捕获的异常会导致what()之后终止?
不需要。标准不需要未捕获的异常即可打印出what()
。 实际上,它们使编写一个始终如此的一致性实现变得非常困难(但并非不可能)。
确实没有一种很好的方法来精确地执行您想做的事情(打印出what()
,只有在这种情况下实现不这样做的情况下,然后继续执行terminate()
就像从未发生过异常一样抓住)。 但这可能不是您真正想要的。
这可能是您想要的:
#import <exception>
#import <iostream>
int real_main(int argc, char *argv[]);
int main(int argc, char *argv[]) {
try {
return real_main(argc, argv);
} catch (std::exception &e) {
std::cerr << "exception: e.what()" << "\n";
exit(1);
} catch (...) {
std::cerr << "exception not derived from std::exception\n";
exit(1);
}
}
int real_main(int argc, char *argv[])
{
// real main code goes here
}
如果您真的想_exit
或abort
(甚至terminate
)而不是exit
,则可以这样做。 但是,如果您不知道,则可能要exit
。
与此同时:
…知道我不喜欢设置异常处理程序的想法,因为这迫使图书馆的用户去做
你在写图书馆吗? 您是否希望您的库能够终止应用程序背后的进程?
那可能是一个非常糟糕的主意。
但是,如果您确实想这样做,则可以使用上面相同的代码,只需将其包装在库的入口点周围,而不是在main
周围即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.