Jak mogę odczytać plik awarii z / var / crash

20

php-fpm rozbił się na nas i zrzucił plik

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

W tym pliku jest kilka informacji, ale szukam w sekcji o nazwie CoreDump w formacie zakodowanym w standardzie base64. Jak mogę przeczytać, co działało w czasie awarii?

użytkownik76369
źródło

Odpowiedzi:

18

W przypadku, gdy nie chcesz instalować wiązki zależności dla apport-retracenarzędzia, możesz rozpakować format apport do osobnych plików i używać tylko CoreDumpzrzutu gdbjak zwykle.

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere
  2. cd yourNewUnpackDirectoryHere/
  3. gdb `cat ExecutablePath` CoreDump (zwróć uwagę na tyldy tutaj!)
  4. bt (wyjściowy faktyczny ślad zwrotny)

    Uwaga: apport-unpackczasami zawiesza się podczas operacji rozpakowywania (apport wydaje się być uszkodzony dookoła ... xD), ale twój CoreDump i inne pliki będą tam, po prostu zignoruj ​​je i usuń wszystkie pliki .crash /var/crashpo przeniesieniu ich w inne miejsce, aby umożliwić system do generowania nowych raportów o awariach z tych samych aplikacji.

stamster
źródło
1
Działa jak urok, bez konieczności instalowania apport-retrace , dzięki!
greuze
1
@digital_infinity nie ?! Przekonaj się sam. Jest duża różnica między echem a kotem ...
stamster
2
@stamster Masz rację. Przepraszamy, brakowało mi pliku o nazwie ExecutablePath. Myślałem, że czytelnik musi tam wypełnić ścieżkę wykonywalną.
digital_infinity
15

Istnieje narzędzie o nazwie, apport-retracektóre odczytuje pliki .crash i pozwala albo wypełnić go w pełni symbolicznym śladem stosu, albo uruchomić gdbsesję przy użyciu zrzutu pamięci. Aby rozpocząć sesję gdb, uruchom apport-retrace -g CRASHFILE.crash. Pamiętaj, że musisz mieć zainstalowane pakiety -dbg, aby uzyskać dobre dane śledzenia stosu.

Biorąc to pod uwagę (nie jestem ekspertem od PHP), może to być coś, co napisałeś w jednym z plików, który powoduje awarię.

saiarcot895
źródło
4
Nie t seem to work: # apport -retrace -g _usr_sbin_php5-fpm.1002.crash BŁĄD: plik raportu nie zawiera jednego z wymaganych pól: CoreDump DistroRelease Package ExecutablePath` # grep CoreDump _usr_sbin_php5-fpm.1002.crash CoreDump: base64
user76369
10
Edytuj plik awarii i dodaj pole „Pakiet: 0” w obszarze ExecutableTimestamp.
DarkNeuron,