Enviado em 02/08/2018 - 15:22h
Executar função antes de fechar por falha de segmentação [RESOLVIDO]
Responder tópico2. Re: Executar função antes de fechar por falha de segmentação
Melhor respostaEnviado 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
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:
Até!
Fonte: https://jodal.no/post/5779178001/log-from-the-debugging-of-a-segfault/
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]
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.
É 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]
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. ;)
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]
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.
Responder tópico
Entre na sua conta para responder.