diff --git a/mods/02/README.org b/mods/02/README.org new file mode 100644 index 0000000..0a4e7f7 --- /dev/null +++ b/mods/02/README.org @@ -0,0 +1,149 @@ +#+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 + +** 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.