Publicado por: falcaomoura | 30 de setembro de 2009

Como são gerados e o que são core dump

Quando o kernel envia um sinal o mesmo determina o tipo do sinal e “desliga” os bits de sinais apropriados na tabela de processos. Se a função de envio de sinal for setada para o valor default, o kernel, antes de encerrar o processo, gera um arquivo “core” com a imagem do processo.

Os arquivos core são importantes para programadores, permitindo que este identifiquem causas de erro no processo de debug de programas. O kernel gera os core para sinais que indiquem alguma anomalia no sistema, como por exemplo um processo que execute uma instrução ilegal ou quando o mesmo acessa endereços fora do seu limite de endereços virtuais. Mas o kernel não gera core para sinais que não indiquem um erro de programa. Por exemplo, ao receber um sinal de interrupção enviado pelo usuário, isso implica que o usuário deseja terminar o processo prematuramente, este tipo de sinal não indica que alguma coisa esteja errada, porém existe uma forma de gerar core de forma proposital, isso é possível com o sinal de quit, através do conjunto de teclas Ctrl+\, isso gera um core do processo que está em execução.

Para verificar qual é o conjunto de teclas setados no seu sistema digite o seguinte:

# stty -a  


agora identifique que conjunto de teclas está associado ao quit.

Para realizar uma analise de arquivos core inicialmente você pode usar o comando  “file” para identificar qual programa gerou o core:

# ls -alp  
...   
-rw-------   1  frank   frank    90112  Jan  5  03:56  core  

# file core 
core: ELF  32-bit LSB core file of  'ls'  (signal 3), Intel 80386, version  1  

Uma vez identificada a aplicação que gerou o core, no caso  “ls”,  podemos usar o comando GDB (GNU Debugger):

# gdb ls core 
... 
Core was generated by  'ls  -alp'. 
Program  terminated with signal 3, Quit. 
Reading symbols from  /lib/libc.so.6...done. 
Reading symbols from  /lib/ld-linux.so.2...done. 
Reading symbols from  /lib/libnss_files.so.2...done. 
#0  0x400bb534  in  __libc_read ( ) 
 (gdb) 

use “q”, quit,  para encerrar o gdb.

No caso do nosso exemplo nota-se que o core foi gerando devido a uma interrupção proposital do processo através do sinal de quit ( Ctrl+\ ).


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Categorias

%d blogueiros gostam disto: