Onde procurar o arquivo principal gerado pelo travamento de um aplicativo linux?

18

Estou tentando descobrir o motivo da falha de um dos meus aplicativos Linux. Mas não sei para onde está indo o núcleo.

cat /proc/sys/kernel/core_pattern
core.%e.%p

Qualquer ideia?

dcds
fonte

Respostas:

22

O dump principal é gravado no diretório atual do processo no momento do travamento.

É claro que os dumps principais precisam ser ativados; por padrão, esses geralmente são desativados. Verifique a saída de ulimit -c, se for 0, nenhum arquivo principal será gravado. Execute ulimit -c unlimitedpara ativar os dumps principais; essa é uma configuração por processo herdada pelos processos iniciados por esse processo.

Se um dump principal tiver sido gerado, mas você não souber onde, poderá iniciar o processo novamente (se ocorrer sem travar imediatamente) e verificar seu diretório de trabalho, indicando ls -l /proc/$pid/cwdonde $pidestá o ID do processo. Esse link apontará para o diretório de trabalho atual desse processo. As chances são de que o dump principal estará lá. Caso contrário, você precisará executar findem todo o sistema ...

Wurtel
fonte
3
Eu verifiquei o ulimit -c é ilimitado, mas ainda não há nada no diretório atual do processo.
DCPs
1
É possível que a aplicação detectou um erro fatal em si e abortado, ou seja, não é um "real" crash, como uma violação de segmentação ou similar, que iria gerar um despejo de núcleo. Como você não fornece informações sobre o aplicativo, não é possível saber.
wurtel
1
É definitivamente um acidente porque eu conscientemente fazendo um ponteiro nulo.
dcds 20/01
20

Os sistemas que usam systemd geralmente são configurados para despejar núcleos para

/var/lib/systemd/coredump/

Você pode usar o coredumpctlcomando para listar os dumps principais. Consulte também no-more-coredumps-after-migrating-to-systemd

StefanQ
fonte