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

问题描述 投票:0回答:2

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

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

现在是我的问题和问题:

  • 问题:核心转储可能非常大(高达 5 或 10 GB)。 core文件的复制需要一定的时间(最多2分钟)。这对我的客户来说是一个问题:崩溃和应用程序自动重新启动之间的时间太长。
  • 问题:我使用 gdb 从 1) 我的程序 2) 核心文件生成回溯。 当应用程序崩溃时,通过“将核心转储传送到程序”来调用自定义脚本:在这个程序中,我可以直接将 gdb 连接到“垂死”的程序并生成回溯,从而赢得时间来将核心文件复制到硬盘?
  • 提前致谢。

简单说一下:

我竭尽全力将核心转储的大小减少到最小(没有调试符号,仅转储回溯所需的内容(请参阅
    控制将哪些映射写入核心转储
  • ))
c++ linux gdb coredump
2个回答
0
投票
这里

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


0
投票
gdb

来对崩溃程序进行回溯。只需拦截像 SIGBUS 这样的信号,当收到信号时,您可以使用

backtrace()
或简单地使用程序的 pid 调用 gstack。

© www.soinside.com 2019 - 2024. All rights reserved.