HN revela: adolescente de 17 anos investiu 6 meses no desenvolvimento de um depurador em C
(github.com/d4ckard)Introdução ao depurador Spray
- Spray é um depurador simples e fácil de entender para código C.
- Oferece recursos para controlar a execução de programas em execução e inspecionar e modificar seu estado.
- O desenvolvimento começou com o objetivo de explorar a curiosidade sobre o funcionamento interno de depuradores e de tornar a depuração mais acessível.
Principais recursos
- Definição de breakpoints em funções, linhas dentro de arquivos e endereços.
- Exibição e definição de valores de variáveis, endereços de memória e registradores.
- Destaque de sintaxe em C, backtrace e execução passo a passo.
- Recurso de filtros para especificar o formato de saída dos comandos.
Roadmap de desenvolvimento
- Exibição e modificação de structs complexas.
- Destaque de sintaxe para structs complexas.
- Backtrace baseado em DWARF, em vez de ponteiro de frame.
- Funções inline, carregamento de bibliotecas externas e captura de sinais enviados ao programa em depuração.
Como instalar
- Parte do frontend do Spray foi escrita em Scheme e compilada para C via CHICKEN Scheme.
- É necessário instalar o CHICKEN e, como há dependência de libdwarf, ela deve ser instalada primeiro.
- Clone o repositório e instale o Spray com o comando
make. - Adicione ao
$PATHpara poder usá-lo como um comando comum.
Como usar o Spray
- O binário a ser depurado deve ter informações de depuração ativadas, e a otimização deve estar desativada.
- O programa deve ser compilado usando Clang.
- Passe como primeiro argumento o nome do binário a ser depurado e, em seguida, os argumentos do programa que será depurado.
Comandos
Ler e escrever valores
- Exibe ou define valores de variáveis, registradores e endereços.
- Nomes de registradores usam o prefixo
%conforme a sintaxe de assembly AT&T. - Os valores podem ser especificados em decimal ou hexadecimal.
Breakpoints
- Define e remove breakpoints em funções, linhas dentro de arquivos e endereços.
- Use o comando
continuepara seguir a execução até o próximo breakpoint.
Execução passo a passo
- Avança para a próxima linha, entra em uma função ou sai da função atual.
- Avança para a próxima instrução e exibe o backtrace na posição atual.
Filtros
- É possível usar filtros para alterar o formato de saída.
- Anexe filtros após os comandos
printesetpara mudar o formato de exibição.
Como contribuir
- Toda contribuição é bem-vinda; antes de enviar um pull request, execute a suíte de testes local para verificar se nenhuma funcionalidade foi quebrada.
- Falhas de teste causadas por erros off-by-one em determinados valores podem ser ignoradas.
Referências
- Série de posts no blog de Sy Brand "Writing a Linux Debugger", padrão DWARF 5, documentação do libdwarf e o post "How debuggers work" de Eli Bendersky.
Opinião do GN⁺
O ponto mais importante deste texto é que o Spray é um depurador amigável para código C, com foco em tornar a depuração mais acessível. É atraente por oferecer uma estrutura e comandos fáceis de entender até mesmo para engenheiros de software iniciantes, ajudando a tornar tarefas complexas de depuração mais simples. Além disso, o roadmap de desenvolvimento e a forma de contribuição são apresentados com clareza, oferecendo uma oportunidade interessante para desenvolvedores que desejam participar de um projeto open source.
1 comentários
Comentários do Hacker News
O código desse jovem programador é especialmente limpo, consistente e bem modularizado. Projetos assim exigem um conhecimento incomum de formatos binários e APIs de kernel. Até muitos programadores "avançados" podem ter dificuldade para construir algo assim, mesmo em nível conceitual.
É interessante ler o código de programadores jovens. Falta experiência, mas dá para ver que projetam com um nível considerável de conhecimento. O autor parece aprender rápido, e o resultado de 6 meses de trabalho é excelente.
Fico impressionado com esse nível de dedicação. Recomendo participar de programas como Google Summer of Code, KDE Season of Code, Linux Foundation LFX e X.org EVoC. Há muitos problemas interessantes. Gostaria de ter conhecido esses programas quando era estudante. Agora tenho um emprego em tempo integral e não tenho tempo para contribuir com código aberto.
Dei uma primeira olhada no projeto e ele está bem organizado. É digno de elogio.
Parabéns pelo projeto e boa sorte. Compiladores foram um dos primeiros temas que me fizeram me interessar por computação.
Isso mostra que jovens de 17 anos ainda sabem o que é um CD. Talvez o ícone de salvar em disquete ainda não esteja tão ultrapassado.
O conhecimento e a maturidade demonstrados aos 17 anos são impressionantes. Os temas pesquisados e utilizados são esperados em nível universitário, e este projeto se encaixaria em uma disciplina de pós-graduação. Desejo uma carreira de sucesso.
Lembro de ter escrito uma biblioteca gráfica 2D em Turbo Pascal quando era jovem. Foi antes de eu descobrir a internet, então acabou sendo apenas uma diversão pessoal, mas acho que você fez muito bem em criar algo para que outras pessoas pudessem ver. O código está limpo, bem comentado, e o README é claro.
Criar um tutorial de "como escrever um depurador" junto com o projeto pode ser entediante, mas seria muito útil.
Fico curioso sobre o motivo de haver um espaço entre o nome da função e os argumentos. Como alguém que lê código C há 18 anos, isso parece um pouco estranho.
man stylee experimentar esse estilo.