如何避免编写核心文件并加速回溯生成

时间:2013-11-21 20:51:05

标签: c++ linux gdb core

在我提出问题之前,我简要介绍一下如何从客户那里回溯。 我在linux上编写了一个C ++应用程序(opensuse)。

此应用程序由脚本(启动程序)启动,如果应用程序崩溃,则会生成核心转储(因为ulimit -c unlimited)。 然后启动器从核心文件和gdb生成回溯,并再次启动应用程序,这使用户可以发送包含回溯的崩溃报告。

现在我的问题和我的问题:

  • 问题:核心转储可能非常大(最多5或10 GB)。核心文件的副本需要一定的时间(最多2分钟)。这对我的客户来说是个问题:崩溃和应用程序自动重启之间的时间太长了。
  • 问题:我使用gdb从1)生成回溯我的程序2)核心文件。 当应用程序崩溃时,Piping core dumps to a program会调用一个自定义脚本:在这个程序中,我可以直接将gdb附加到“垂死”程序并生成回溯,从而赚取时间来复制硬盘上的核心文件吗? / LI>

提前致谢。

只是一句话:

2 个答案:

答案 0 :(得分:0)

您不必添加整个gdb只是为了执行崩溃程序的回溯。只需截取SIGBUS等信号,当发出信号时,您可以使用backtrace()或只是使用程序的pid调用gstack。

答案 1 :(得分:0)

如何在不以复制/粘贴形式here生成核心转储的情况下获取堆栈跟踪有一个很好的答案。

它将为stderr生成一个堆栈跟踪,但您可以轻松地执行不同的操作,例如使用HTTP等发布堆栈跟踪数据。