Executar função antes de fechar por falha de segmentação [RESOLVIDO]

1. Executar função antes de fechar por falha de segmentação [RESOLVIDO]

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 02/08/2018 - 15:22h




  


2. MELHOR RESPOSTA

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 02/08/2018 - 16:04h

Quando ocorre uma falha de segmentação, é gerado um arquivo de dump no diretório atual (core).

Para debugar a aplicação usando esse dump, é utilizado a sintaxe

gdb ./aplicacao core 


Assim, você poderá fazer um backtrace no GDB.

* Lembrando que para o arquivo core_file ser gerado é necessário que o tamanho do core dump não seja zero. Você pode deixar como ilimitado assim:
ulimit -c unlimited 


Até!

Fonte: https://jodal.no/post/5779178001/log-from-the-debugging-of-a-segfault/

3. Re: Executar função antes de fechar por falha de segmentação [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/08/2018 - 02:48h

O Thihup já deu o caminho das pedras. O arquivo core fica gravado no diretório corrente, se você tiver permissão de gravar nele e se o tamanho do arquivo estiver dentro dos limites permitidos (que você pode ajustar no shell por meio do comando ulimit).

É possível interceptar ou ignorar o SIGSEGV (veja documentação de sigaction()). No entanto, eu acho que isso tenderia a não ser muito útil, especialmente se a falha de segmentação ocorrer durante a manipulação de dados locais de uma função, a outros objetos na pilha ou a áreas dinamicamente alocadas cujos ponteiros estejam num escopo que não seja visível pela função tratadora do sinal.

Eu realmente penso que usar o gdb é uma boa, quer com um core dump de uma execução anteriormente abortada, quer com a execução corrente e dados correntes. Entretanto, há outras possibilidades também, cuja utilidade pode variar, dependendo do caso. Valgrind é uma delas. Outras incluem strace, ltrace, dtrace e até mesmo programas que façam diagnóstico do ambiente, em lugar de um processo, tais como ps, top, tcpdump e várias outras.


4. Re: Executar função antes de fechar por falha de segmentação [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/08/2018 - 13:01h

Gambiarra chamar setrlimit()? Por quê?

Passar o core para você, é? Espero que você não manipule dados sensíveis, tais como senhas. ;)


5. Re: Executar função antes de fechar por falha de segmentação [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/08/2018 - 13:43h

Leia a manpage de core (seção 5 do manual on-line). Há muitas opções modernosas que eu não conhecia num core dump tradicional, que permitem um bocado de coisas interessantes, inclusive para escolher que partes serão incluídas no dump.