如何查看CoreDump文件?


13

当报告崩溃中的错误时,该错误将变为私有,并称为CoreDump.gz的文件。错误分类文档提供了以下内容:

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

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

Answers:


15

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

可以通过运行'gdb'查看Coredumps:

gdb --core=mycoredump

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

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

(gdb) bt

生成当前线程的堆栈跟踪-不带参数解析-或

(gdb) thread apply all bt full

生成带有参数解析的coredump中所有线程的stacktrace。

stacktrace和完整的stacktrace显示程序中的控制流。对于Python,stacktrace的顶部显示最早的调用,而最新的显示在底部。对于几乎所有其他内容,顶部是最近的通话,而底部是最旧的​​通话。

完整的堆栈跟踪不仅将显示流,而且还将显示参数的值。我们通常在这里找到私有数据-例如,假设您看到一个名为“ validatePassword”的函数,其参数为“ Password”,其值为“ MySecretPassword” ...

通常,只有在安装了调试软件包的情况下,Stacktraces才有用(以便将堆栈框架解析为易于读取的内容)。分析堆栈跟踪将需要一个具有用于构建此特定程序实例的源。


CoreDump是一个二进制文件,但是您如何查看呢?仅当安装了调试软件包时,Stacktraces才有用,那么为什么apport会报告它?
komputes 2011年

1
不是要查看CoreDump文件,而是要在gdb中进行调试。您需要有一台运行相同版本软件(以及所有依赖项)的计算机来生成崩溃并具有调试包,然后可以使用上面发布的Carlos来获取堆栈跟踪。
stgraber 2011年

2
现在,为什么它与apport仍然保持联系,这是因为apport有许多“回溯器”来抓取您的coredump,将调试程序包安装在DC中的一个盒子上,然后将整个stacktract附加到bug报告中。
stgraber 2011年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.