【发布时间】:2011-06-01 12:27:46
【问题描述】:
在 Java/C# 异常中提供堆栈/函数跟踪的事实非常有用。有没有一种方便的方法可以在 C++ 中执行此操作,还是我必须将额外的数据烘焙到每个方法/函数中?
【问题讨论】:
在 Java/C# 异常中提供堆栈/函数跟踪的事实非常有用。有没有一种方便的方法可以在 C++ 中执行此操作,还是我必须将额外的数据烘焙到每个方法/函数中?
【问题讨论】:
一些操作系统 API 提供堆栈跟踪,我知道 Windows API 有 StackWalk64 或类似的东西可以进行堆栈跟踪。
但是,如果您不能依赖这样的东西,那么您几乎可以做的就是发布一个调试版本,或者手动进行。
【讨论】:
如果您正在考虑将元数据添加到您的异常中,您可以考虑使用 boost exception handling 。 boost::exception 允许在异常被抛出后添加信息。
【讨论】:
大多数调试器可以设置为在每次抛出异常(任何异常或没有处理程序的异常)时暂停您的程序,以便您可以观察调用堆栈。
此外,如果您的代码仅抛出您控制的类的异常 you can put code for dumping the call stack in those classes constructors。
【讨论】: