Capture e registre backtraces do GDB sem parar o processo

5
Primeiro, uma breve descrição da situação: um computador fica escondido perto de uma exibição em uma galeria de algum tipo, agindo como o cavalo de batalha silencioso para uma peça. Apesar das melhores intenções de seu programador, a peça pode, bem, falhar, de tempos em tempos, dependendo das interações do transeunte com a tela. O programador preparou o computador para reiniciar automaticamente o programa relevante usando um laço bash, já que o tempo de atividade (ou algo parecido com ele) é um prêmio.

O desenvolvedor gostaria de determinar qual é a causa de qualquer falha, mas executar o programa via GDB - com o melhor conhecimento do desenvolvedor - resultaria na interrupção do processo. Isso de fato permitiria que o desenvolvedor tocasse em 'backtrace' e encontrasse a causa, mas a peça ficaria inoperável até que o desenvolvedor fizesse seu caminho até a galeria em questão para verificar isso. Isso não é bom.

Como esse intrépido desenvolvedor pode proteger os backtraces de cada falha (e presumivelmente armazená-los em algum lugar) via GDB, mas ainda permitir o comportamento original de reiniciar automaticamente o processo após uma falha?

    
por multihead 11.04.2011 / 06:41

1 resposta

6

Execute ulimit -c 1073741824 antes de iniciar o programa. Na próxima vez que o programa travar, um dump de núcleo será criado no diretório de trabalho (denominado core.<PID> ). Você pode usar o GDB para abrir esse núcleo a qualquer momento.

ulimit -c XXXXX define o tamanho máximo do arquivo de dump principal criado quando um programa seg falha. Por padrão, isso é 0 , o que significa não despejar o núcleo.

    
por 11.04.2011 / 06:52