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):
[code]
(gdb) attach 4411
Attaching to process 4411
Reading symbols from /home/otavio/projects/tmp/ex_daemon...done.
Reading symbols from /usr/lib/libssl.so.0.9.7...done.
Loaded symbols for /usr/lib/libssl.so.0.9.7
Reading symbols from /usr/lib/libstdc++.so.5...done.
Loaded symbols for /usr/lib/libstdc++.so.5
Reading symbols from /lib/libm.so.6...done.
Loaded symbols for /lib/libm.so.6
Reading symbols from /usr/lib/libgcc_s.so.1...done.
Loaded symbols for /usr/lib/libgcc_s.so.1
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /usr/lib/libcrypto.so.0.9.7...done.
Loaded symbols for /usr/lib/libcrypto.so.0.9.7
Reading symbols from /lib/libdl.so.2...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib/libpthread.so.0...done.
[New Thread 16384 (LWP 4411)]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /usr/lib/libz.so.1...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
0xb7d7e4d6 in accept () from /lib/libc.so.6
[/code]

Uma vez com o processo anexado ao GDB é só gerar o core.
[code]
(gdb) generate-core-file
Saved corefile core.4411
[/code]

Depois de gerar o core, você já pode desanexar o processo usando o comando detach
[code]
(gdb) detach
Detaching from program: /home/otavio/projects/tmp/ex_daemon
[/code]

Por fim, basta carregar o core e uma tabela de símbolos válida (a partir do executável).
[code]
(gdb) core core.4411
Core was generated by `/home/otavio/projects/tmp/ex_daemon'.
# 0 0xb7d7e4d6 in ?? ()
(gdb) file /home/otavio/projects/tmp/ex_daemon
Reading symbols from /home/otavio/projects/tmp/ex_daemon...done.
[/code]

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

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

    • October 2009
    • July 2009
    • June 2009
    • March 2009
    • February 2009
    • January 2009
    • December 2008
    • 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 (4)
    • Dica (24)
    • Geral (70)
      • Curiosidades (6)
    • iPhone (1)
    • Mentes Brilhantes (1)
    • Sistemas Operacionais (42)
      • FreeBSD (1)
      • Linux (21)
        • Arch Linux (3)
        • Gentoo (14)
      • Mac OS X (12)
      • Outros Sistemas (1)
      • Unix (4)
      • Windows (5)
    • Tecnologia (91)
      • Banco de Dados (6)
      • Desenvolvimento (68)
        • Análise (1)
        • C & C++ (6)
        • POG (2)

For Fun and Profit is proudly powered by WordPress | Bob