Quando ocorrer uma falha de segmentação no Linux, a mensagem de erro Segmentation fault (core dumped)
será impressa no terminal (se houver) e o programa será encerrado. Como um desenvolvedor de C / C ++, isso acontece muitas vezes, e eu geralmente o ignoro e passo em frente gdb
, recriando minha ação anterior para acionar a referência de memória inválida novamente. Em vez disso, pensei que talvez pudesse usar esse "núcleo", pois executar gdb
o tempo todo é bastante entediante e nem sempre posso recriar a falha de segmentação.
Minhas perguntas são três:
- Onde esse "núcleo" ilusório é despejado?
- O que contém?
- O que posso fazer com isso?
gdb path-to-your-binary path-to-corefile
,info stack
seguido deCtrl-d
. A única coisa preocupante é que o core-dumping é uma coisa comum para você.Respostas:
Se outras pessoas limparem ...
... você geralmente não encontra nada. Mas, felizmente, o Linux tem um manipulador para isso, que você pode especificar em tempo de execução. Em /usr/src/linux/Documentation/sysctl/kernel.txt, você encontrará:
( obrigado )
De acordo com a fonte, isso é tratado pelo
abrt
programa (que é a Ferramenta Automática de Relatório de Erros, e não anulado), mas no meu Arch Linux é tratado pelo systemd. Você pode escrever seu próprio manipulador ou usar o diretório atual.Mas o que tem lá?
Agora, o que ele contém é específico do sistema, mas de acordo com a enciclopédia onisciente :
... então basicamente contém tudo que você
gdb
sempre quis e muito mais.Sim, mas gostaria que eu fosse feliz em vez de gdb
Você pode tanto ser feliz, pois
gdb
vai carregar qualquer dump de memória, desde que você tenha uma cópia exata de seu executável:gdb path/to/binary my/core.dump
. Você deve poder continuar os negócios como de costume e ficar aborrecido ao tentar e falhar na correção de bugs, em vez de tentar e não conseguir reproduzir bugs.fonte
Além disso, se
ulimit -c
retornar0
, nenhum arquivo de despejo principal será gravado.Consulte Onde procurar o arquivo principal gerado pelo travamento de um aplicativo linux?
Você também pode disparar um core dump manualmente com CTRL- \que encerra o processo e causa um core dump.
fonte
O arquivo principal normalmente é chamado
core
e está localizado no diretório de trabalho atual do processo. No entanto, há uma longa lista de razões pelas quais um arquivo principal não seria gerado e pode estar localizado em outro lugar inteiramente, com um nome diferente. Consulte a página do manual core.5 para obter detalhes:fonte
No Ubuntu, qualquer falha que acontece é registrada em / var / crash. O relatório de falha gerado pode ser descompactado usando uma ferramenta apport
e, em seguida, o dump principal no relatório descompactado pode ser lido usando
fonte