如何从 /var/crash 读取崩溃文件

use*_*369 37 apport

php-fpm 对我们崩溃并将文件转储到

/var/crash/_usr_sbin_php5-fpm.1002.crash
Run Code Online (Sandbox Code Playgroud)

该文件中有一些信息,但我所追求的是 base64 编码格式的 CoreDump 部分。如何读取崩溃时正在运行的内容?

sta*_*ter 37

如果您不想为apport-retrace工具安装一堆子依赖项,您可以将 apport 格式解包到单独的文件中,CoreDumpgdb像往常一样仅使用转储。

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere

  2. cd yourNewUnpackDirectoryHere/

  3. gdb `cat ExecutablePath` CoreDump (注意这里的波浪号!)

  4. bt (输出实际回溯)

    注意:apport-unpack有时会在解包操作时自行崩溃(apport 似乎到处都损坏了... xD),但是您的 CoreDump 和其他文件将在那里,只需忽略它并/var/crash在您将它们移至其他地方后删除所有 .crash 文件以允许系统从那里的相同应用程序输出新的崩溃报告。

  • 很好的答案。只是稍微修正一下(对于其他痴迷于细节的愚蠢的人),步骤 3 不包含波浪号。我假设你指的是反引号。 (3认同)
  • @stamster 你是对的。抱歉,我错过了一个名为“ExecutablePath”的文件。我认为读者必须在那里填写可执行路径。 (2认同)

sai*_*895 16

有一个工具apport-retrace可以读取 .crash 文件,并允许您使用全符号堆栈跟踪填充它或gdb使用核心转储运行会话。要启动 gdb 会话,请运行apport-retrace -g CRASHFILE.crash. 请注意,您需要安装 -dbg 软件包才能获得良好的堆栈跟踪。

话虽如此(我不是 PHP 专家),它实际上可能是您在导致崩溃的文件之一中编写的内容。

  • 编辑崩溃文件并在 ExecutableTimestamp 下添加字段“Package: 0”。 (13认同)
  • 似乎不起作用:`# apport-retrace -g _usr_sbin_php5-fpm.1002.crash 错误:报告文件不包含必填字段之一:CoreDump DistroRelease Package ExecutablePath``# grep CoreDump _usr_sbin_php5-fpm.1002.crash核心转储:base64` (6认同)