【问题标题】:Getting a stack trace in C++ exceptions在 C++ 异常中获取堆栈跟踪
【发布时间】:2011-06-01 12:27:46
【问题描述】:

在 Java/C# 异常中提供堆栈/函数跟踪的事实非常有用。有没有一种方便的方法可以在 C++ 中执行此操作,还是我必须将额外的数据烘焙到每个方法/函数中?

【问题讨论】:

标签: c++ exception-handling


【解决方案1】:

一些操作系统 API 提供堆栈跟踪,我知道 Windows API 有 StackWalk64 或类似的东西可以进行堆栈跟踪。

但是,如果您不能依赖这样的东西,那么您几乎可以做的就是发布一个调试版本,或者手动进行。

【讨论】:

    【解决方案2】:

    如果您正在考虑将元数据添加到您的异常中,您可以考虑使用 boost exception handling 。 boost::exception 允许在异常被抛出后添加信息。

    【讨论】:

      【解决方案3】:

      大多数调试器可以设置为在每次抛出异常(任何异常或没有处理程序的异常)时暂停您的程序,以便您可以观察调用堆栈。

      此外,如果您的代码仅抛出您控制的类的异常 you can put code for dumping the call stack in those classes constructors

      【讨论】:

      • 这是用于在野外记录异常,而不是在调试期间。
      • @John:第二段是关于那个 - 实际上我链接到的整个问题都是关于那个。
      • 我认为问题是“异常类的构造函数中应该有什么代码来获取堆栈跟踪”?
      • @John:这将取决于平台。
      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多