OK, o info break lista os pontos de interrupção, mas não em um formato que funcione bem em reutilizá-los usando o comando - como nesta pergunta . O GDB tem um método para despejá-los em um arquivo aceitável para entrada novamente? Às vezes, em uma sessão de depuração, é necessário reiniciar o GDB após criar um conjunto de pontos de interrupção para teste.
O arquivo .gdbinit tem o mesmo problema que --command. O comando info break não lista comandos, mas uma tabela para consumo humano.
Para elaborar, aqui está uma amostra da quebra de informações :
(gdb) quebra de informação Num Tipo Disp Enb Endereço O que 1 ponto de interrupção mantém y 0x08048517 <foo :: bar (void) +7>
Make breakpoint pending on future shared library load? (y or [n]) [answered N; input not from terminal]
set breakpoint pending on
conforme descrito em como responder Y no roteiro gdb e gdb: como pontos de interrupção conjunto em futuras bibliotecas compartilhadas com uma bandeira --commandbreak g_log if log_level==G_LOG_LEVEL_CRITICAL
), pelo menos o gdb 7.8.1 irá parar de analisar outros comandos. Se você possui comandos adicionais que devem ser executados para esse ponto de interrupção, coloque acommands
linha antes dacondition
linha.Esta resposta está desatualizada. O GDB agora suporta salvar diretamente. Veja esta resposta .
Você pode usar o log:
O arquivo breaks.txt agora contém:
É fácil escrever um script AWK que o transforme em um formato útil para o arquivo
.gdbinit
ou--command
para ele. Ou você pode até fazer o script emitir separado--eval-command
para a linha de comando do GDB ...Adicionar esta pequena macro ao .gdbinit ajudará você a fazer isso:
fonte
save breakpoints
comandoColoque seus comandos e pontos de interrupção do GDB em um arquivo .gdbinit, assim como você pode digitá-los no
gdb>
prompt, e o GDB os carregará e executará automaticamente na inicialização. Este é um arquivo por diretório, para que você possa ter arquivos diferentes para diferentes projetos.fonte
Uma extensão da extensão de anon para a resposta de Johannes :
Com
brestore
você, é possível restaurar os pontos de interrupção salvos combsave
.fonte
Extensão para a resposta de Johannes : você pode reformatar automaticamente a saída
info break
em um arquivo de comando GDB válido:Depois, você tem um arquivo de comando válido no
brestore.gdb
.Isso funcionou para mim quando o aplicativo é compilado
-g
.Também testei com sucesso o GDB v6.8 no Ubuntu 9.10 (Karmic Koala).
fonte
Talvez isto:
save breakpoints [filename]
fonte
Coloque o seguinte em ~ / .gdbinit para definir bsave e brestore como comandos do GDB para salvar e restaurar pontos de interrupção.
fonte
Também recebo esse erro / aviso no GDB ao tentar ativar o log no modo TUI . No entanto, o log parece funcionar quando no modo "não TUI". Portanto, deixo o modo TUI sempre que quero registrar algo. (Alterne para frente e para trás no modo TUI com Ctrl+X , Ctrl+A ).
Aqui está como eu trabalho:
set logging on
- agora não deve reclamar.fonte
Eu achei a seguinte adição a uma resposta anterior útil para salvar / carregar os pontos de interrupção em um arquivo específico.
Como na resposta anterior, adicione o seguinte código ao arquivo ~ / .gdbinit
fonte
O problema é que a definição de um ponto de interrupção é sensível ao contexto. E se você tiver duas funções estáticas chamadas foo ?
Se você já estiver depurando um dos módulos que define foo, o GDB assumirá que você o quis dizer. Mas se você simplesmente despejar "pausa foo" em um arquivo e, em seguida, ler esse arquivo no arranque, não ficará claro qual a função foo você quer dizer.
fonte
Alguma outra ideia? eu tenho
depois de
EDITAR:
Eu sei que a pergunta é "como salvar uma lista de pontos de interrupção", mas acabei de descobrir que, com o GDB, podemos simplesmente definir os pontos de interrupção "salvos no arquivo"
Onde
breakpoints.txt
está um arquivo como este:fonte