我的任务是编写一个脚本来清理生产 Linux 服务器上的旧核心文件。虽然脚本不难编写,但我想在删除核心文件之前将基本的堆栈回溯保存到日志文件中。
由于这些服务器是生产服务器,而且我们没有安装 GDB 或任何开发工具,我正在寻找一些快速而肮脏的程序,它可以为多线程应用程序提供 gdb 回溯命令的模拟。
有人知道这样的工具吗?
提前致谢。
我的任务是编写一个脚本来清理生产 Linux 服务器上的旧核心文件。虽然脚本不难编写,但我想在删除核心文件之前将基本的堆栈回溯保存到日志文件中。
由于这些服务器是生产服务器,而且我们没有安装 GDB 或任何开发工具,我正在寻找一些快速而肮脏的程序,它可以为多线程应用程序提供 gdb 回溯命令的模拟。
有人知道这样的工具吗?
提前致谢。
有几件事是这样的。大多数情况下,它们相对于 gdb 是不完整的——例如,回溯器打印有关函数参数或局部变量的信息并不常见,但 gdb 可以做到这一点。在其他展开器阻塞的情况下,gdb 也经常可以展开。
无论如何,我知道的一个是elfutils。https://fedorahosted.org/elfutils/。它有一个正在开发的展开器(不确定它是否在或尚未,检查 git)。
还有libbacktrace。它是 gcc 的一部分,专为进程内展开而设计。但是,它也许可以适应核心文件。
还有libunwind。我听说这有点可怕,但 YMMV。
需要注意的一件事是,其中许多都需要 debuginfo 可用。
最后一个想法——ABRT 人员在“catch a trace”领域做了很多工作。ABRT 使用内核挂钩来捕获正在生成的核心转储。然后它通过将核心上传到服务器、文件错误等来进行分析。你也许可以重用他们的很多工作。在这个领域还有一些其他的工作。
有点脑残,希望对你有帮助。