c++ - 将大型核心文件转换为 "minicore"文件

标签 c++ c linux debugging gdb

如何将核心文件减少到仅线程堆栈?

我希望能够运行 gdb thread apply all bt on the mini core and no more

我正在处理大型 (>4GB) 多线程 Linux ELF 核心文件,这些文件太大而无法取回进行分析。

我看到了 google-breakpad这意味着在进程崩溃时创建一个“minidump”。在 google-breakpad有两个实用程序 core2mdminidump-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/

相关文章:

c++ - 通过 char[] 将对象指针传递给回调

linux - ubuntu安装后USB的再利用

linux - 使用 busybox 添加 200 条路由

linux - Sed 没有写入文件

c++ - 如何避免使用 lock_guard 锁定?

c++ - 如何为一组对象重载运算符

c++ - Armadillo 和 C++ - 使用二维数组进行矩阵初始化

c - 如果我不初始化 sum 变量,为什么这个简单的求和会被编译器优化破坏?

c - 为什么 break 不能与三元运算符一起使用?

c - 休眠小于 1ms