Comandos mais complicados / úteis para o depurador gdb [closed]


138

Você pode postar seus comandos mais complicados e úteis enquanto executa um depurador como gdb ou dbx.


Achei que esta documentação é boa. scc.ustc.edu.cn/zlsc/sugon/intel/debugger/cl/…
Rick

Respostas:


134
  1. backtrace full : backtrace completo com variáveis ​​locais
  2. cima , baixo , quadro : mover-se pelos quadros
  3. watch : Suspenda o processo quando uma determinada condição for atendida
  4. definir impressão bonita : imprime código-fonte C formatado com beleza
  5. definir logon : sessão de depuração de log para mostrar a outras pessoas o suporte
  6. definir matriz de impressão :
  7. acabamento : continua até o final da função
  8. ativar e desativar : ativar / desativar pontos de interrupção
  9. tbreak : quebre uma vez e remova o ponto de interrupção
  10. em que : número da linha atualmente sendo executada
  11. info locals : visualize todas as variáveis ​​locais
  12. info args : exibe todos os argumentos das funções
  13. list : visualizar fonte
  14. rbreak : quebra na função que corresponde à expressão regular

7
info locals- Veja todas as variáveis ​​locais; lista - visualizar fonte; rbreak - quebra na função que corresponde à expressão regular.
Paul Biggar

source / path / to / macro / file E todas as minhas macros bacanas estão lá para me ajudar a depurar em segundos.
Sudhanshu 13/01/10

1
set print object onpara elementos polimórficos e set print elements 0são dois comandos que eu uso com muita frequência. Bastante útil.
18714 Kiril Kirov

1
Além disso, t a a bt(significado thread apply all backtrace). Pode ser usado com (quase) todos os outros comandos. Especialmente útil com bt full.
21914 Kiril Kirov

101

Inicie o gdb com uma interface de usuário textual

gdb -tui

21
Não acredito que esse recurso me escapou por todos esses anos. Obrigado, obrigado, obrigado!
DevSolar

Obrigado Você economizou muito do meu tempo .. Maravilhoso .... #
217

1
E outro: <minus> RET
SullX 28/10

1
ou use cgdb
Patryk

características muito boas. Perdeu esta tão longe ...
PraveenMax

45

A partir do gdb 7.0, há depuração reversível ; portanto, seus novos comandos favoritos são:

* reverse-continue ('rc') -- Continue program being debugged but run it in reverse
* reverse-finish -- Execute backward until just before the selected stack frame is called
* reverse-next ('rn') -- Step program backward, proceeding through subroutine calls.
* reverse-nexti ('rni') -- Step backward one instruction, but proceed through called subroutines.
* reverse-step ('rs') -- Step program backward until it reaches the beginning of a previous source line
* reverse-stepi -- Step backward exactly one instruction
* set exec-direction (forward/reverse) -- Set direction of execution.

21

Em vez de iniciar o GDB com o parâmetro "-tui", você também pode mudar para o modo de texto depois de um tempo usando, digitando "wh".


3
Ctrl-a a para voltar à exibição da linha de comando 'normal'!
Kevin

2
"- 'pode ser usado em vez de' wh '. quanto mais curto, melhor .. :) #
raj_gt1 5/05/15

6
Ctrl-a a? Isso é uma piada? Parece mais com tmux/ screencommand. E não funciona para mim. Ele deve ser um dos como por docs : C-x C-a, C-x a, C-x A.
X-yuri

Na verdade é C-x a. Você também pode alternar as visualizações com C-x 1e C-x 2quando no modo tui para ver a montagem também (se necessário).
Sam Whitlock

16

thread apply all btou thread apply all print $pc: Para descobrir rapidamente o que todos os threads estão fazendo.


Esse era o comando que eu procurava há muito tempo! É realmente desagradável verificar todos os 30 tópicos um por um!
tothphu


6

Usando a -command=<file with gdb commands>opção durante a inicialização do gdb. O mesmo que -x <command file>. Este arquivo de comando pode conter comandos gdb, como pontos de interrupção, opções, etc. Útil no caso de um determinado executável precisar ser executado em execuções sucessivas de depuração usando o gdb.


Você também pode usar a -iexopção para adicionar comandos individuais na linha de comando gdb.
precisa saber é o seguinte

5

scripting gdb é um bom truque, além do que eu gosto de ativar / desativar o bloqueio do agendador para impedir a execução de outros threads quando você está entrando em um.


1
Como você define o bloqueio do agendador?
Deft_code 01/06/10

3
set scheduler-locking ondentro de gdb
Ben

como você faz isso o padrão? Eu tentei .gdbinit, mas o gdb imprime /home/omry/.gdbinit:1: Erro no arquivo de comando de origem: O destino 'None' não pode suportar este comando.
Omry Yadan

4
  • Usando .gdbinit (inicie o arquivo onde você pode gravar macros e chamar a partir do gdb). Coloque .gdbinit no diretório inicial para que ele seja capturado toda vez que o gdb for carregado
  • threads de informações para listar todos os threads ativos ef (#) -> # número do thread para o qual você deseja alternar

  • em algum momento eu uso o gdb para converter de hex para decimal ou binário, é muito útil em vez de abrir uma calculadora

    • p / d 0x10 -> fornece o equivalente decimal de 0x10
    • p / t 0x10 -> equivalente binário de 0x10
    • p / x 256 -> hexadecimal equivalente a 256

4

Em vez de iniciar o gdb com a opção -tui para ver um processo filho que contém uma tela que destaca onde a linha de código em execução está no seu programa, entre e saia desse recurso com Cx o e Cx a. Isso é útil se você estiver usando o recurso e o que não usar temporariamente, para que você possa usar a seta para cima para obter um comando anterior.


2
você pode alterar o foco para a janela de comando usando focus cmdpara que as setas para cima / para baixo funcionem. Você volta a usar focus src.
21414 Nathan Fellman

3

Isso pode ser útil, tenho certeza de que poderia ser melhorado, ajude a bem-vindo:

define mallocinfo
  set $__f = fopen("/dev/tty", "w")
  call malloc_info(0, $__f)
  call fclose($__f)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.