Como posso ler um arquivo de falha em / var / crash

20

O php-fpm bateu em nós e despejou um arquivo

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

Há algumas informações nesse arquivo, mas o que estou procurando é na seção chamada CoreDump em um formato codificado em base64. Como posso ler o que estava sendo executado no momento do acidente?

user76369
fonte

Respostas:

18

Caso não deseje instalar várias sub-dependências da apport-retraceferramenta, você pode descompactar o formato apport em arquivos separados e usar apenas o CoreDumpdump gdbcomo de costume.

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere
  2. cd yourNewUnpackDirectoryHere/
  3. gdb `cat ExecutablePath` CoreDump (preste atenção aos tildes aqui!)
  4. bt (saída de rastreamento real)

    Nota: apport-unpackpor vezes, irá travar-se em operação descompactar (apport parece quebrado todo ... xD), mas o seu coredump e outros arquivos estarão lá, simplesmente ignorá-lo e apagar todos os arquivos .crash em /var/crashdepois de movê-los em outros lugares, a fim de permitir sistema para gerar novos relatórios de falhas dos mesmos aplicativos.

stamster
fonte
11
Funcionou como um encanto, sem a necessidade de instalar o apport-retrace , obrigado!
Greuze
11
@digital_infinity no ?! Veja você mesmo. Há uma grande diferença entre eco e gato ...
stamster 27/02
2
@stamster Você está certo. Desculpe, perdi o arquivo com o nome ExecutablePath. Eu pensei que o leitor deveria preencher o caminho do executável lá.
digital_infinity
15

Existe uma ferramenta chamada apport-retraceque lê os arquivos .crash e permite preenchê-lo com um rastreamento de pilha totalmente simbólico ou executar uma gdbsessão usando o dump principal. Para iniciar uma sessão gdb, execute apport-retrace -g CRASHFILE.crash. Observe que você precisa ter os pacotes -dbg instalados para obter um bom rastreamento de pilha.

Dito isto (não sou especialista em PHP), pode ser algo que você escreveu em um dos seus arquivos que está causando a falha.

saiarcot895
fonte
4
Doesn t seem to work: # apport-retrace -g _usr_sbin_php5-fpm.1002.crash ERRO: o arquivo de relatório não contém um dos campos obrigatórios: CoreDump DistroRelease Package ExecutablePath` # grep CoreDump _usr_sbin_php5-fpm.1002.crash CoreDump: base64
user76369
10
Edite o arquivo de falha e adicione o campo "Pacote: 0" em ExecutableTimestamp.
precisa saber é o seguinte