154 lines
3.8 KiB
Org Mode
154 lines
3.8 KiB
Org Mode
#+title: Curso prático de introdução ao GDB
|
|
#+author: Blau Araujo
|
|
#+email: blau@debxp.org
|
|
|
|
* 2. Instalação e configurações de início
|
|
|
|
** Objetivos
|
|
|
|
- Como instalar o GDB nas principais distribuições GNU/Linux;
|
|
- Conhecer algumas possibilidades de customização.
|
|
|
|
** Instalação
|
|
|
|
*** Debian e derivados
|
|
|
|
#+begin_example
|
|
sudo apt update
|
|
sudo apt install gdb
|
|
#+end_example
|
|
|
|
#+begin_quote
|
|
O pacote =gdb-doc= instala o manual do GDB, mas ele não é instalado por padrão no
|
|
Debian por estar na seção =non-free/doc=.
|
|
#+end_quote
|
|
|
|
O pacote =build-essential= instala outras ferramentas úteis para desenvolvimento,
|
|
incluindo o =gcc= (/GNU Compiler Collection/), o =make= e as dependências mais comuns.
|
|
|
|
#+begin_example
|
|
sudo apt install build-essential
|
|
#+end_example
|
|
|
|
*** Fedora e derivados
|
|
|
|
#+begin_example
|
|
sudo dnf install gdb
|
|
#+end_example
|
|
|
|
Para um ambiente completo de desenvolvimento:
|
|
|
|
#+begin_example
|
|
sudo dnf groupinstall "Development Tools"
|
|
#+end_example
|
|
|
|
*** Arch Linux e derivados
|
|
|
|
#+begin_example
|
|
sudo pacman -S gdb
|
|
#+end_example
|
|
|
|
O grupo =base-devel= contém ferramentas úteis para compilação e depuração:
|
|
|
|
#+begin_example
|
|
sudo pacman -S base-devel
|
|
#+end_example
|
|
|
|
*** Verificação da instalação
|
|
|
|
Versão:
|
|
|
|
#+begin_example
|
|
gdb --version
|
|
#+end_example
|
|
|
|
Ajuda:
|
|
|
|
#+begin_example
|
|
gdb --help
|
|
#+end_example
|
|
|
|
** Configurações de início
|
|
|
|
O GDB pode ser configurado por meio de arquivos de inicialização lidos
|
|
automaticamente ao iniciar. Esses arquivos permitem predefinir opções úteis,
|
|
automatizar tarefas e estender o ambiente de depuração.
|
|
|
|
*** Configuração por usuário
|
|
|
|
O arquivo =~/.gdbinit=:
|
|
|
|
O GDB executa esse arquivo sempre que for iniciado, a menos que seja desativado
|
|
com a opção =-nh=.
|
|
|
|
Configuração de exemplo:
|
|
|
|
#+begin_src gdb
|
|
set pagination off # Não pausa a saída do GDB
|
|
set confirm off # Não pede confirmação para alguns comandos
|
|
set print pretty on # Formata a apresentação de structs e arrays
|
|
set history save on # Salva histórico entre seções
|
|
set history size 1000 # Tamanho máximo do histórico
|
|
set disassembly-flavor intel # Define a sintaxe Intel na desmontagem de binários
|
|
#+end_src
|
|
|
|
Também pode ser interessante omitir as mensagens de versão no início do GDB,
|
|
o que é feito no arquivo =~/.config/gdb/gdbearlyinit=:
|
|
|
|
#+begin_example
|
|
set startup-quietly on
|
|
#+end_example
|
|
|
|
#+begin_quote
|
|
O arquivo =gdbearlyinit= é carregado antes do GDB executar outros arquivos
|
|
de início e só recebe definições que afetam o seu próprio comportamento.
|
|
#+end_quote
|
|
|
|
*** Configuração por projeto
|
|
|
|
Arquivo =.gdbinit= no diretório do projeto (configuração local):
|
|
|
|
Se existir um arquivo =.gdbinit= no diretório corrente, o GDB pode executá-lo,
|
|
mas isso é bloqueado por padrão:
|
|
|
|
#+begin_example
|
|
:~/projeto$ gdb
|
|
Warning: File ".gdbinit" auto-loading has been declined by your `auto-load safe-path'...
|
|
#+end_example
|
|
|
|
Para permitir o carregamento, temos que adicionar o caminho do projeto ao
|
|
arquivo do usuário:
|
|
|
|
#+begin_src sh
|
|
echo "add-auto-load-safe-path $(pwd)" >> ~/.gdbinit
|
|
#+end_src
|
|
|
|
#+begin_quote
|
|
Isso é muito utilizado para definir /breakpoints/ automáticos, carregar símbolos
|
|
extras, configurar scripts, etc.
|
|
#+end_quote
|
|
|
|
*** Configuração global
|
|
|
|
O arquivo de configuração do sistema, =/etc/gdb/gdbinit=, é lido antes de
|
|
=~/.gdbinit= e pode ser usado para definir opções globais em ambientes
|
|
compartilhados (ex: laboratórios ou servidores educacionais).
|
|
|
|
*** Comandos customizados
|
|
|
|
Nos arquivos =.gdbinit=, também é possível definir comandos customizados
|
|
com a sintaxe:
|
|
|
|
#+begin_example
|
|
define COMANDO
|
|
LISTA DE COMANDOS
|
|
end
|
|
document COMANDO
|
|
DESCRIÇÃO
|
|
end
|
|
#+end_example
|
|
|
|
*** Scripts em Python
|
|
|
|
É possível estender o GDB usando scripts em Python no =.gdbinit=, mas isso
|
|
foge do escopo deste curso.
|