2011-10-03 44 views
9

我需要一种方法来在调试日志中记录函数堆栈跟踪以帮助我诊断缺陷。问题是我需要使用C++在Windows和Linux上实现这个功能。用于日志记录的库在运行时调用堆栈(Windows/Linux)

一个小小的研究后,我发现:

  • 对于Windows实现,我可以使用StackWalk64 API函数和家人。
  • 在Linux下,我发现libunwind听起来不错。
  • 或者,我可以使用的glibc的backtrace

开始工作之前,我想要一些意见,如果这是正确的做法,并询问是否有一个已经写的多平台库,可以帮助。我怀疑我不是第一个需要这个的程序员。 :)

+0

+1对于一个很好的问题很好的问道! –

回答

3

Google Breakpad为您处理所有这些,如果你想从现场得到崩溃转储。

+1

崩溃转储包含更多信息,然后我需要。并应该进行后处理 - 这是一个很大的不便。我只需要将堆栈跟踪作为一个字符串或一个字符串数组。 – vlg789

+0

除非您愿意随应用程序一起发布私有PDB,并且小型转储的大小约为大型JPEG,否则您必须进行后期处理。 –

+0

运送私人PDB不是问题。 – vlg789

1

几年前,我写了这个:http://drdobbs.com/cpp/191100567

基本上一些宏记录在堆栈展开时发生异常的地方被抛出。

该框架的更新版本可以在图书馆找到Imebra(http://imebra.com)

+0

你指的是FUNCTION_START/FUNCTION_END宏? – vlg789

+0

是的。他们捕捉并重新抛出并记录异常的通过。 –