我无法回想起GCC库使用什么来实现堆栈展开,它用于c ++异常和调用跟踪,我知道C ++规范中没有定义,所以任何答案这是特定于平台的。我正在使用GCC 4.9.0。
了解出错的地方非常有用,尤其是在调试过程中。因此,我经常会在扩展中扩展并传递__LINE__
和__FILE__
的宏。
我不是很喜欢这样做,但是它告诉你调用函数的位置(因为宏__LINE__
和__FILE__
在调用站点),这真的很方便!
不是使用基于构建条件定义的某些可怕的宏,而是使用堆栈展开库的条件定义代码很好。
使用什么库?当一个编译时,编译器可以被告知要记录多少信息?显然,对于发布版本,您只需要异常处理所需的内容。
如果不是什么约定? C ++程序员如何获得Python和Java程序员理所当然的东西 - 冗长的堆栈跟踪。
我认为一个后备但不是非常优雅的解决方案是创建一个新的基础,我从中抛出异常并有一个宏重新生成并追加行,文件和__FUNCTION__
,但这是一个后备。
我感兴趣的是GCC使用的库和选项,以便GCC控制它输入的信息量,所以请分享你对它的所有知识!
答案 0 :(得分:0)
如果您在linux下使用,这是另一种选择。
1)设计您的信号处理程序,因此任何异常都将由您自己的信号处理程序处理,而不是像生成coredump文件那样的系统。
2)在信号处理程序中,只要获得异常,使用系统调用pstack生成跟踪信息。
like :: system(“pstack yourpid> logfilename”);