Estou fazendo uma boa apresentação da execução do código de montagem do ARM e precisaria do GDB para passar o código a cada 1 segundo infinitamente longo (bem, até eu pressionar CTRL+ C). Alguém tem solução?
Não quero ficar ao lado do teclado e pisar no programa quando os visitantes vêm visitar minha barraca.
A CLI do Gdb suporta um
while
loop. Não há nenhum comando embutidosleep
, mas você pode chamar o shell para executar osleep
programa ou usar o interpretador python embutido do gdb, se tiver um. É interrompível com Control-C.Método 1:
Método 2:
Método 3 (definir uma macro):
expect
pode automatizar issoou se houver risco do programa ficar sem
s
você pode repetigdb
-lo com um pouco mais de complicaçãoVocê pode ter o shell pipe em comandos; aqui fica a ideia:
gdb lê os comandos do pipe; ele vê um comando "step" a cada segundo ad infinitum.
Você pode querer configurar alguns pontos de interrupção e executar o programa; ajuste a gosto:
A resposta atualmente aceita sempre
step
, uma vez iniciada e, portanto, também "pula" pontos de interrupção, sinais e até mesmo o final do programa (no último caso, gerando um único erro "O programa não está sendo executado" antes de o gdb abortar internamente owhile
local onde isso aconteceu) .Como um culpado adicional, ele para se a paginação estiver ativada (que é o padrão) assim que a saída do GDB estiver "cheia".
Usando a API python, isso pode ser tratado de maneira agradável:
stop
manipulador de eventos que verifique o motivo da parada e armazene o tipo de etapa láO seguinte código pode ser colocado em um gdb-auto-step.py que pode ser ativado
source gdb-auto-step.py
quando você quiser (ou incluir no arquivo .gdbinit para torná-lo sempre disponível):