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