2 pontos por GN⁺ 2023-11-12 | 1 comentários | Compartilhar no WhatsApp

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 $PATH para 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 continue para 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 print e set para 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

 
GN⁺ 2023-11-12
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.

    • Fico curioso sobre como alguém de 17 anos adquire esse conhecimento. Seria por meio de livros, colegas, clubes de programação ou pais programadores?
  • É 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.

    • Fico curioso sobre há quanto tempo programa e com qual linguagem começou. Há desenvolvedores décadas mais velhos que você que não sabem escrever um Makefile.
    • Fico curioso se usar emojis inline no código-fonte é uma tendência recente ou se é para chamar atenção para entradas não ASCII.
  • Parabéns pelo projeto e boa sorte. Compiladores foram um dos primeiros temas que me fizeram me interessar por computação.

    • Há um livro que reli várias vezes e que hoje está disponível gratuitamente. É sobre a parte de compiladores, mas também pode ser interessante para depuraçã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.

    • Colocar seu trabalho no mundo dá medo, mas o que as pessoas dizem muitas vezes fala mais sobre elas mesmas, então você não precisa levar tudo tão a sério.
  • 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.

    • Prefiro o estilo BSD e, se você usa sistemas BSD, sugiro consultar man style e experimentar esse estilo.