首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用跟踪的C++异常处理

调用跟踪的C++异常处理
EN

Stack Overflow用户
提问于 2014-05-07 00:26:00
回答 1查看 107关注 0票数 0

我需要为一个非常大的C++代码实现一个异常处理系统。我需要执行符合下列规格的标准:

  • 当引发异常时,打印出调用跟踪
  • 允许开发人员在调用异常时指定有关函数状态的可选附加信息。(例如,迭代期间计数器的值)
  • 很容易实现(因为我自己做不到)
  • 无创
  • 便携

在我看来,似乎在每个函数中放置try/catch块是唯一可能的解决方案,但这似乎通常是草率的做法,并被认为是不好的做法。它也笨手笨脚,难以始终如一地维持/实施。

我还研究过像stacktrace这样的库,但是它们在可移植性方面似乎是有限的,我不得不牺牲这种能力来获得可选的附加状态信息。

编辑:做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 02:36:21

很好的要求列表!当然,进行堆栈跟踪并不是可移植的,但是所有流行的编译器都允许进行堆栈跟踪。您可以开始查看后退/回溯符号函数(gcc、clang)。这是一个示例

关于第二点--最好用字符串消息限制异常类。根据我的经验,传递任意信息并不真正有用(除了输出错误消息之外,您还有哪些其他处理选项?)如果您仍然坚持将类型化数据链接到异常,boost::exception将完成此工作。

您还可能希望将“链接异常”项添加到需求列表中。它是很有用的特性,特别是当应用程序有几个层,并且重新抛出原始异常一次或多次时。C++11允许轻松实现链接异常。请参阅实施实例测试用例,它们演示了如何使用它。

关于第四点-- C++异常不是侵入性的(从某种意义上说)。你甚至不需要抓住它。如果您从std::what()继承了异常类,并提供了适当的what()实现,那么捕获端将处理抛出的任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23506711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档