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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts