For Fun and Profit

Gerando arquivos core de processos em execução

Eventualmente é necessário depurar um processo atualmente em execução sem que o processo seja iniciado através do gdb. Nem sempre é possível reiniciar um serviço atualmente ativo. Mas isso tem uma solução simples, o gdb permite que você anexe processos a ele, desta maneira permitindo gerar arquivos core, analisar a stack e um monte de outras coisas uteis. Este pequeno tutorial mostra como fazer isso.

Para gerar arquivos core de processos em execução você deve, primeiramente, saber o PID do processo. Uma vez tendo o PID do processo você pode executar o gdb e proceder da seguinte maneira (aqui, assumi que o PID do processo é 4411):

PLAIN TEXT
CODE:
  1. (gdb) attach 4411
  2. Attaching to process 4411
  3. Reading symbols from /home/otavio/projects/tmp/ex_daemon...done.
  4. Reading symbols from /usr/lib/libssl.so.0.9.7...done.
  5. Loaded symbols for /usr/lib/libssl.so.0.9.7
  6. Reading symbols from /usr/lib/libstdc++.so.5...done.
  7. Loaded symbols for /usr/lib/libstdc++.so.5
  8. Reading symbols from /lib/libm.so.6...done.
  9. Loaded symbols for /lib/libm.so.6
  10. Reading symbols from /usr/lib/libgcc_s.so.1...done.
  11. Loaded symbols for /usr/lib/libgcc_s.so.1
  12. Reading symbols from /lib/libc.so.6...done.
  13. Loaded symbols for /lib/libc.so.6
  14. Reading symbols from /usr/lib/libcrypto.so.0.9.7...done.
  15. Loaded symbols for /usr/lib/libcrypto.so.0.9.7
  16. Reading symbols from /lib/libdl.so.2...done.
  17. Loaded symbols for /lib/libdl.so.2
  18. Reading symbols from /lib/libpthread.so.0...done.
  19. [New Thread 16384 (LWP 4411)]
  20. Loaded symbols for /lib/libpthread.so.0
  21. Reading symbols from /usr/lib/libz.so.1...done.
  22. Loaded symbols for /usr/lib/libz.so.1
  23. Reading symbols from /lib/ld-linux.so.2...done.
  24. Loaded symbols for /lib/ld-linux.so.2
  25. 0xb7d7e4d6 in accept () from /lib/libc.so.6

Uma vez com o processo anexado ao GDB é só gerar o core.

PLAIN TEXT
CODE:
  1. (gdb) generate-core-file
  2. Saved corefile core.4411

Depois de gerar o core, você já pode desanexar o processo usando o comando detach

PLAIN TEXT
CODE:
  1. (gdb) detach
  2. Detaching from program: /home/otavio/projects/tmp/ex_daemon

Por fim, basta carregar o core e uma tabela de símbolos válida (a partir do executável).

PLAIN TEXT
CODE:
  1. (gdb) core core.4411
  2. Core was generated by `/home/otavio/projects/tmp/ex_daemon'.
  3. # 0  0xb7d7e4d6 in ?? ()
  4. (gdb) file /home/otavio/projects/tmp/ex_daemon
  5. Reading symbols from /home/otavio/projects/tmp/ex_daemon...done.

A partir de agora, você já pode analisar a stack no momento do travamento, verificar o código assembly gerado, etc, etc, etc. Esse tipo de informação é bastante útil quando para analisar dados de travamento quando ocorrem em servidores de produção, por exemplo.

Esta entrada foi postada em Wednesday, November 8th, 2006 at 5:17 am na categoria Desenvolvimento, Tecnologia. Você pode acompanhar as respostas através do RSS 2.0 feed. Você pode deixar uma resposta, ou um trackback do seu site.

« Mais uma usuária Linux
RPM Guide & Maximum RPM »

Comentar

  • Páginas

    • Sobre
    • Meu Mundo de TI
      • Artigos
      • Filesystem Hierarchy Standard
      • Pacotes RPM (RPM Packages)
      • Screenshots
    • Variedades
      • Fotos
      • Mapas
      • Museu do IRC RioMafrense
      • Receitas
  • Arquivos

    • November 2008
    • October 2008
    • September 2008
    • August 2008
    • July 2008
    • June 2008
    • May 2008
    • April 2008
    • March 2008
    • February 2008
    • January 2008
    • November 2007
    • October 2007
    • September 2007
    • June 2007
    • April 2007
    • March 2007
    • February 2007
    • January 2007
    • December 2006
    • November 2006
    • October 2006
    • September 2006
    • August 2006
    • July 2006
    • June 2006
    • May 2006
    • April 2006
    • March 2006
    • February 2006
    • January 2006
  • Categorias

    • Ciência (3)
    • Dica (21)
    • Geral (67)
      • Curiosidades (6)
    • Mentes Brilhantes (1)
    • Sistemas Operacionais (37)
      • FreeBSD (1)
      • Linux (19)
        • Arch Linux (2)
        • Gentoo (13)
      • Mac OS X (11)
      • Outros Sistemas (1)
      • Unix (4)
      • Windows (2)
    • Tecnologia (84)
      • Banco de Dados (6)
      • Desenvolvimento (62)
        • Análise (1)
        • C & C++ (5)
        • POG (2)

For Fun and Profit is proudly powered by WordPress | Bob