Как я могу прочитать файл сбоя из / var / crash

20

php-fpm обрушился на нас и выкинул файл в

/var/crash/_usr_sbin_php5-fpm.1002.crash

В этом файле есть некоторая информация, но то, что мне нужно, это раздел CoreDump в формате base64. Как я могу прочитать, что работало во время аварии?

user76369
источник

Ответы:

18

В случае, если вы не хотите устанавливать связку зависимостей для apport-retraceинструмента, вы можете распаковать формат apport в отдельные файлы и использовать только CoreDumpдамп gdbкак обычно.

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere
  2. cd yourNewUnpackDirectoryHere/
  3. gdb `cat ExecutablePath` CoreDump (обратите внимание на тильды здесь!)
  4. bt (вывод фактической обратной трассировки)

    Примечание: apport-unpackиногда происходит сбой при распаковке (apport кажется разбитым вокруг ... xD), но ваш CoreDump и другие файлы будут там, просто проигнорируйте его и удалите все файлы .crash /var/crashпосле их перемещения в другое место, чтобы Система для вывода новых отчетов о сбоях из тех же приложений там.

stamster
источник
1
Работал как шарм, не требуя установки apport-retrace , спасибо!
Груз
1
@digital_infinity нет ?! Убедитесь сами. Существует большая разница между эхом и кошкой ...
Stamster
2
@stamster Вы правы. Извините, я пропустил, что есть файл с именем ExecutablePath. Я думал, что читатель должен заполнить путь к исполняемому файлу там.
digital_infinity
15

Существует инструмент под названием, apport-retraceкоторый читает файлы .crash и позволяет вам либо заполнить его полностью символической трассировкой стека, либо запустить gdbсеанс с использованием дампа ядра. Чтобы начать сеанс GDB, запустите apport-retrace -g CRASHFILE.crash. Обратите внимание, что вам нужно установить пакеты -dbg, чтобы получить хорошую трассировку стека.

При этом (я не эксперт по PHP), это может быть то, что вы написали в одном из ваших файлов, что вызывает сбой.

saiarcot895
источник
4
Разрешает t seem to work: # apport-retrace -g _usr_sbin_php5-fpm.1002.crash ОШИБКА: файл отчета не содержит одно из обязательных полей: Пакет CoreDump DistroRelease ExecutablePath` # grep CoreDump _usr_sbin_php5-fpm.1002.crash CoreDump: base64
user76369
10
Отредактируйте файл аварийного завершения и добавьте поле «Package: 0» в ExecutableTimestamp.
DarkNeuron