如何将核心文件减少到仅线程堆栈?
我希望能够运行 gdb thread apply all bt
on the mini core and no more
我正在处理大型 (>4GB) 多线程 Linux ELF 核心文件,这些文件太大而无法取回进行分析。
我看到了 google-breakpad这意味着在进程崩溃时创建一个“minidump”。在 google-breakpad有两个实用程序 core2md
和 minidump-2-core
乍一看应该能够将核心文件转换为 minidump 格式,然后从仅包含堆栈信息的小型转储。这个问题是 core2md 需要/proc/$PID/下的进程信息,而我没有。
最佳答案
可能您最好的选择是将 google breakpad 集成到您的 Linux 进程中,这样当发生崩溃时,它是 google breakpad 记录崩溃而不是操作系统创建核心文件。这将为您提供所需的信息,然后您可以使用 minidump_stackwalk 转储调用堆栈(方便总结大量崩溃),或者您可以使用 minidump-2-core 创建核心文件。
不幸的是,Linux 似乎没有一种有效的方法来创建仅包含线程堆栈内容的最小核心文件。这些文件(Windows 世界中的小型转储)非常有用——它们具有非常高的信息大小比,可以轻松收集数百万个故障转储。
关于c++ - 将大型核心文件转换为 "minicore"文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737025/