如何查看 CoreDump 文件?

kom*_*tes 13 bug-reporting apport

在报告崩溃中的错误时,该错误会被设为私有并保存为一个名为 CoreDump.gz 的文件。错误分类文档说明如下:

如果崩溃仍然有 CoreDump.gz 附件,则无法自动获取完全符号化的堆栈跟踪并检查重复项。

Stacktrace.txt 似乎是人类可读的。我如何理解堆栈跟踪的含义。CoreDump 和 CoreDump.gz 似乎不是人类可读的。什么是“完全符号堆栈跟踪”?“完全符号堆栈跟踪”之间有什么区别 如何查看 CoreDump 文件的内容?(试过'猫',但它不干净)

hgg*_*gdh 15

Coredump.gz 是崩溃的程序可访问的(压缩)内存。它是一个二进制文件。Coredump 是一个宝库,可以挖掘各种私人数据。

可以通过运行“gdb”来查看核心转储:

gdb --core=mycoredump
Run Code Online (Sandbox Code Playgroud)

当然,您仍然需要与该内核关联的调试包。

然后,您可以通过以下方式生成堆栈跟踪:

(gdb) bt
Run Code Online (Sandbox Code Playgroud)

生成当前线程的堆栈跟踪——没有参数解析——,或者

(gdb) thread apply all bt full
Run Code Online (Sandbox Code Playgroud)

使用参数解析生成核心转储中所有线程的堆栈跟踪。

堆栈跟踪和完整堆栈跟踪显示程序内的控制流。对于 Python,堆栈跟踪的顶部显示最旧的调用,最近的在底部;对于几乎所有其他事情,顶部是最近的调用,底部是最旧的​​调用。

完整的堆栈跟踪不仅会显示流程,还会显示参数的值。这是我们通常可以找到私有数据的地方——例如,假设您看到一个名为“validatePassword”的函数,其参数名为“Password”,值为“MySecretPassword”……

堆栈跟踪通常只有在安装了调试包时才有用(以便堆栈帧可以解析为我们可以轻松阅读的内容)。对堆栈跟踪的分析将需要具有用于构建此特定程序实例的源。

  • 现在至于为什么它仍然与 apport 相关,这是因为 apport 有一堆“回溯器”,它们会抓取您的核心转储,将调试包安装在 DC 的一个盒子上,然后将完整的堆栈附加到错误报告中。 (2认同)