comandos básicos incluídos na parte 1

This commit is contained in:
Blau Araujo 2025-04-27 11:52:21 -03:00
parent 6e4727ada1
commit 7085ead45c

View file

@ -27,7 +27,8 @@ em tempo real ou após uma falha, fornecendo recursos como:
Por operar em baixo nível, o GDB oferece uma visão detalhada do comportamento Por operar em baixo nível, o GDB oferece uma visão detalhada do comportamento
interno do programa, sendo essencial tanto para o desenvolvimento quanto para interno do programa, sendo essencial tanto para o desenvolvimento quanto para
o diagnóstico de erros complexos. o diagnóstico de erros complexos (isso, sem falar de seu enorme potencial como
ferramenta de exploração no aprendizado de sistemas).
** O que é depurar (/debugar/) ** O que é depurar (/debugar/)
@ -387,3 +388,146 @@ Para sair do GDB...
(gdb) quit (gdb) quit
:~$ :~$
#+end_example #+end_example
** Opções de início do GDB
| Comando | Descrição |
|--------------------------------+---------------------------------------------------------------------------------------|
| =gdb --help= | Listas todas as opções de linha de comando com uma breve explicação. |
| =gdb= | Iniciar o GDB sem arquivos para depurar. |
| =gdb PROGRAMA= | Inciar o GDB para depurar =PROGRAMA=. |
| =gdb PROGRAMA DESPEJO= | Inciar o GDB para depurar =PROGRAMA= e salvar o conteúdo da memória no arquivo =DESPEJO=. |
| =gdb --args PROGRAMA ARGUMENTOS= | Iniciar o GDB para depurar =PROGRAMA= passando =ARGUMENTOS=. |
| =gdb PROGRAMA -d DIR= | Iniciar GDB para depurar =PROGRAMA= utilizando =DIR= para localizar os fontes. |
** Comandos Básicos
As próximas tabelas listam os comandos mais relevantes para quem está começando
a aprender a utilizar o GDB, mas tenha sempre em mente que há muitos outros comandos
e funcionalidades.
*** Sair do GDB
| Comando | Descrição |
|-----------+---------------------------------------------|
| =quit= ou =q= | Sair do GDB |
| =Ctrl+D= | Terminar o shell de comandos (sair do GDB). |
*** Informações
| Comando | Descrição |
|---------------------+----------------------------------------------------------------------------|
| =help= ou =h= | Exibe ajuda e tópicos relacionados a um dado comando. |
| =apropos REGEX= | Busca comandos segundo a expressão regular =REGEX=. |
| =show DEF= | Exibe informações sobre a definição de configuração =DEF= do depurador. |
| =print=, =inspect= ou =p= | Imprime o valor de uma expressão. |
| =info=, =inf= ou =i= | Exibe informações relacionadas ao programa sendo depurado. |
| =x/FORMATO ENDEREÇO= | Examina o conteúdo da memória em um dado =ENDEREÇO= no =FORMATO= especificado. |
*** Arquivos
| Comando | Descrição |
|----------------+-------------------------------------------------------------------------|
| =file ARQUIVO= | Utiliza =ARQUIVO= como caminho do executável e fonte de símbolos. |
| =exec ARQUIVO= | Utiliza =ARQUIVO= apenas como caminho do executável a ser depurado. |
| =symbol ARQUIVO= | Utiliza =ARQUIVO= apenas como fonte de símbolos. |
| =dir DIR= | Adiciona =DIR= ao início da lista de caminhos de busca por códigos-fonte. |
*** Execução
| Comando | Descrição |
|---------------+-------------------------------------------------------------------------------------------------|
| =run= ou =r= | Inicia a execução do programa com uma lista opcional de argumentos. |
| =kill= | Mata a execução do programa sendo depurado. |
| =continue= ou =c= | Continua a execução após uma condição de parada. |
| =step= ou =s= | Executa a próxima linha do programa, mesmo que esteja numa função ou sub-rotina. |
| =next= ou =n= | Executa a próxima linha do código sem entrar em funções ou sub-rotinas. |
| =jump= ou =j= | Salta a execução do programa para uma localização dada na forma de um endereço ou de uma linha. |
*** Pontos de parada
| Comando | Descrição |
|---------------+---------------------------------------------------------------------------------------|
| =break= ou =b= | Define o ponto de parada em um dado endereço, número de linha ou símbolo. |
| =watch EXP= | Define uma parada para observar alterações de valores na expressão =EXP=. |
| =catch EVENTO= | Define uma parada na ocorrência de um dado =EVENTO=. |
| =i breakpoints= | Lista informações sobre todos os pontos de parada. |
| =del [IDs]= | Deleta todos os pontos de parada ou os pontos de parada identificados pelo número =ID=. |
*** Inspeção da pilha de execução
| Comando | Descrição |
|-------------------------+-------------------------------------------------------------------------------------------------------------------------------|
| =backtrace= ou =bt= | Exibe todos os quadros de chamadas de funções na pilha. |
| =info frame [SUBCOMANDO]= | Exibe informações sobre o quadro de pilha selecionado ou, com =SUBCOMANDOS=, possibilita a especificação de um modo de seleção. |
*** Informações sobre processos
Sintaxe geral:
#+begin_example
info proc [SUBCOMANDO][PID]
#+end_example
Onde:
- =SUBCOMANDO=: uma informação específica sobre um dado processo.
- =PID=: número de identificação de um processo qualquer.
Se =PID= não for informado, será utilizado o PID do programa em depuração.
| Comando | Descrição |
|--------------------------+---------------------------------------------------------------------------------------|
| =info proc [PID]= | Exibe a linha de comando, o diretório corrente e o caminho do executável do processo. |
| =info proc all [PID]= | Exibe todas as informações disponíveis sobre o processo. |
| =info proc files [PID]= | Lista todos os arquivos abertos pelo processo. |
| =info proc mappings [PID]= | Lista todas as regiões de memória mapeadas para o processo. |
*** Modos de exibição
| Comando | Descrição |
|-------------------------------+----------------------------------------------------------------------------------------------------|
| =tui enable= | Entra no modo TUI. |
| =tui disable= | Sai do modo TUI. |
| =layout asm= | Entra no modo TUI com a janela da desmontagem do programa em assembly. |
| =layout src= | Entra no modo TUI com a janela do código-fonte do programa. |
| =layout regs= | Entra no modo TUI com as janelas de registradores e de código-fonte ou de desmontagem do programa. |
| =layout split= | Entra no modo TUI com as janelas de código-fonte e desmontagem do programa. |
| =layout next= | Muda para o próximo layout TUI. |
| =layout prev= | Muda para o layout TUI anterior. |
| =tui new-layout NOME DEFINIÇÃO= | Define um novo layout customizado. |
Notas:
- Nós podemos alternar o modo TUI com o atalho =C-x a=;
- Todos os comandos =layout ...= são abreviações de =tui layout ...=;
- Todos os layouts TUI padrão são compostos por janelas, uma barra de status e uma janela de comandos;
- Nós podemos circular pelas janelas do modo TUI com o atalho =C-x o=;
- Os layouts customizados não são salvos entre sessões do GDB, mas podem ser definidos nos seus arquivos de início.
Exemplo de layout customizado:
#+begin_example
(gdb) tui new-layout only-regs regs 1 status 0 cmd 1
(gdb) layout
List of tui layout subcommands:
tui layout asm -- Apply the "asm" layout.
tui layout next -- Apply the next TUI layout.
tui layout only-regs -- Apply the "only-regs" layout.
tui layout prev -- Apply the previous TUI layout.
tui layout regs -- Apply the TUI register layout.
tui layout split -- Apply the "split" layout.
tui layout src -- Apply the "src" layout.
[...]
(gdb)
#+end_example
Outras combinações de teclas para o modo TUI:
| Teclas | Descrição |
|--------+------------------------------------------------------|
| =C-x 1= | No layout /split/, exibir apenas a janela selecionada. |
| =C-x 2= | Utiliza pelo menos duas janelas no modo TUI. |
| =C-l= | Redesenha as janelas no modo TUI. |