当报告崩溃导致的错误时,该错误将被设为私密,并生成一个名为 CoreDump.gz 的文件。Bug Triage 文档说明如下:
如果崩溃仍然有 CoreDump.gz 附件,则无法自动获取完整的符号堆栈跟踪并检查重复项。
Stacktrace.txt 似乎可供人类阅读。我如何理解堆栈跟踪的含义。CoreDump.gz 中的 CoreDump 似乎不适合人类阅读。什么是“完全符号堆栈跟踪”?“完全符号堆栈跟踪”之间的区别是什么?如何查看 CoreDump 文件的内容?(尝试过“cat”,但并不干净)
答案1
Coredump.gz 是崩溃程序可访问的(压缩)内存。它是一个二进制文件。Coredump 是一个宝库,里面有各种可供挖掘的私人数据。
可以通过运行“gdb”来查看核心转储:
gdb --core=mycoredump
当然,您仍然需要与此核心相关的调试包。
然后,您可以通过以下方式生成堆栈跟踪:
(gdb) bt
生成当前线程的堆栈跟踪(无需参数解析),或者
(gdb) thread apply all bt full
生成核心转储中所有线程的堆栈跟踪,并带有参数解析。
堆栈跟踪和完整堆栈跟踪显示程序内的控制流。对于 Python,堆栈跟踪的顶部显示最早的调用,而最新的调用位于底部;对于几乎所有其他内容,顶部是最近的调用,底部是最早的调用。
完整的堆栈跟踪不仅会显示流程,还会显示参数的值。我们通常会在这里找到私有数据 - 例如,假设您看到一个名为“validatePassword”的函数,其参数名为“Password”,其值为“MySecretPassword”...
通常,只有在安装了调试包的情况下,堆栈跟踪才有用(这样堆栈框架才能解析为我们可以轻松读取的内容)。要分析堆栈跟踪,需要拥有用于构建此特定程序实例的源代码。