我不太记得 GCC 使用什么库来实现堆栈展开,它用于 C++ 异常和调用跟踪,而且我知道 C++ 规范中没有定义任何方法,所以对此的任何答案都是特定于平台的。我正在使用 GCC 4.9.0。
知道哪里出了问题非常有用,尤其是在调试期间。所以很多时候我会有一些宏来扩展和传递一些东西__LINE__
,并__FILE__
在扩展中。
我不太喜欢这样做,但它会告诉你从哪里调用函数(作为宏__LINE__
并且__FILE__
在调用站点),这真的很方便!
与其使用一些基于构建有条件地定义的可怕宏,不如拥有一些使用堆栈展开库的有条件定义的代码。
使用什么库?编译时可以告诉编译器要记录多少信息?显然,对于发布版本,您只需要异常处理所需的内容。
如果不是,约定是什么?C++ 程序员如何获得 Python 和 Java 程序员认为理所当然的东西——冗长的堆栈跟踪。
我想一个后备但不是很优雅的解决方案是创建一个新的基础,我从中抛出异常并有一个宏来重新抛出和附加行、文件和__FUNCTION__
,但这是一个后备。
我对 GCC 使用的库以及提供给 GCC 以控制其放入多少信息的选项感兴趣,因此请分享您对此的任何知识!