diff --git a/mods/01/README.org b/mods/01/README.org index c01ab31..381e551 100644 --- a/mods/01/README.org +++ b/mods/01/README.org @@ -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 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/) @@ -387,3 +388,146 @@ Para sair do GDB... (gdb) quit :~$ #+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. |