我需要为一个非常大的C++代码实现一个异常处理系统。我需要执行符合下列规格的标准:
在我看来,似乎在每个函数中放置try/catch块是唯一可能的解决方案,但这似乎通常是草率的做法,并被认为是不好的做法。它也笨手笨脚,难以始终如一地维持/实施。
我还研究过像stacktrace这样的库,但是它们在可移植性方面似乎是有限的,我不得不牺牲这种能力来获得可选的附加状态信息。
编辑:做这件事最好的方法是什么?
发布于 2014-05-07 02:36:21
很好的要求列表!当然,进行堆栈跟踪并不是可移植的,但是所有流行的编译器都允许进行堆栈跟踪。您可以开始查看后退/回溯符号函数(gcc、clang)。这是一个示例。
关于第二点--最好用字符串消息限制异常类。根据我的经验,传递任意信息并不真正有用(除了输出错误消息之外,您还有哪些其他处理选项?)如果您仍然坚持将类型化数据链接到异常,boost::exception将完成此工作。
您还可能希望将“链接异常”项添加到需求列表中。它是很有用的特性,特别是当应用程序有几个层,并且重新抛出原始异常一次或多次时。C++11允许轻松实现链接异常。请参阅实施实例和测试用例,它们演示了如何使用它。
关于第四点-- C++异常不是侵入性的(从某种意义上说)。你甚至不需要抓住它。如果您从std::what()继承了异常类,并提供了适当的what()实现,那么捕获端将处理抛出的任何东西。
https://stackoverflow.com/questions/23506711
复制相似问题