#+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.