HN público: Spray — um depurador C no qual um jovem de 17 anos investiu 6 meses de desenvolvimento
(github.com/d4ckard)- Spray é um pequeno depurador para código C, uma ferramenta para controlar programas em execução e inspecionar ou modificar seu estado, mantendo os recursos simples e fáceis de entender
- Os recursos suportados incluem breakpoints por função, linha de arquivo e endereço; impressão e configuração de variáveis, memória por endereço e registradores; realce de sintaxe C; backtrace; stepping por instrução, função e linha; e filtros de formatação para a saída de comandos
- Os comandos do REPL são
print/set,break/delete,continue,next,step,leave,instebacktrace, permitindo controlar a execução e ler ou escrever valores - Após
printeset, é possível adicionar filtros com pipe (|);dec,hex,addr,bits,bytesederef/*exibem o mesmo valor de 64 bits em diferentes formatos ou fazem a desreferenciação de endereços - Para o build, são necessários CHICKEN Scheme e libdwarf; após clonar também os submódulos e executar
make, o bináriosprayé gerado no diretóriobuild - O binário alvo da depuração deve ser compilado com a flag
-gpara incluir informações de debug, e desativar otimizações é necessário para obter a melhor saída - Spray foi testado apenas com Clang; como cada compilador gera informações de debug para o mesmo código de maneiras diferentes, os programas a serem depurados com o Spray devem ser compilados com
clang - No roadmap ainda estão: imprimir e modificar estruturas compostas, realce de sintaxe para estruturas compostas, backtrace baseado em DWARF em vez de frame pointers, funções inline, carregamento de bibliotecas externas e captura de sinais enviados ao programa alvo da depuração
1 comentários
Opiniões no Hacker News
É especialmente limpo, consistente e bem modularizado, e lida com um problema que exige um conhecimento bastante profundo de formatos binários e APIs do kernel.
Muitos programadores “sênior” teriam dificuldade de criar algo assim até em nível conceitual; é o oposto total de “a juventude de hoje...”.
Fico curioso: como alguém de 17 anos adquire esse nível de conhecimento? Livros, colegas, clube de programação, pais programadores, coisas assim?
Curiosidade pura e a grande condição de “simplesmente ter acesso” ao hardware necessário, além de alguns livros e revistas, já permitem ir bem longe.
Meus pais não eram programadores, mas meu pai comprou um computador cedo, em 1984, e depois, pelo trabalho, trazia para casa compiladores como TurboPascal e C++ para eu experimentar.
Aprendi principalmente com revistas e livros; mais tarde tive algum contato com colegas da cena de criação de demos e também comprava pelo correio discos com documentação (https://fr.wikipedia.org/wiki/DP_Tool_Club). Eram materiais como, por exemplo, https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List.
Fui iterando gradualmente, criando pequenas coisas: um conjunto de ferramentas de janelas para CGA, clones de Tetris e Bomberman, software de FFT, até finalmente chegar a renderização 3D em tempo real, como renderização Phong feita só em software, sem FPU (https://github.com/thbar/demomaking#obez-1995).
Na cena de criação de demos, acabei conhecendo outros adolescentes que faziam a mesma coisa, então eu não era um caso isolado e completamente fora da curva.
Acho que uma criança curiosa hoje pode ir muito mais longe, desde que essa curiosidade seja bem incentivada.
E seu palpite está certo: meu pai é cientista da computação.
Algumas crianças são realmente incríveis. Nessa idade, eu chorei de frustração tentando aprender C++.
Muito legal. Queria ter tido esse nível de dedicação quando era mais novo.
Recomendo tentar participar de programas como Google Summer of Code, KDE Season of Code, Linux Foundation LFX e X.org EVoC.
Há muitos problemas interessantes para resolver. Eu gostaria de ter conhecido essas iniciativas quando era estudante; hoje trabalho em tempo integral e não tenho tempo para contribuir com open source.
Continue mandando bem.
Dei uma primeira olhada no projeto e ele parece bem organizado. Excelente.
Fico curioso: há quanto tempo você programa e com que linguagem começou? Conheço vários desenvolvedores décadas mais velhos que ainda não sabem usar Makefile[1].
Também fiquei curioso sobre os emojis inline no código-fonte. Qual é a intenção? É algo que a garotada descolada faz hoje em dia, ou é para nos obrigar a ficar atentos a entradas que não sejam ASCII?
[1]: E há ainda mais gente que não usa nem entende alvos gerados dinamicamente.
Os emojis foram uma espécie de brincadeira que durou mais ou menos uma semana. Acho que vejo emojis com muito mais frequência no mundo Rust. Não fiz questão de removê-los.
Acho divertido o emoji de inseto perto de PID. Os que estão nos comentários talvez desapareçam algum dia. Até agora, porém, não tive problemas de editor: Helix, Emacs e VSCode funcionam bem.
Fico pensando se, quando as cores do terminal estiverem desligadas, eu também deveria desativar a impressão de emojis na saída padrão pelo REPL.
Parabéns, e boa sorte com seus projetos.
Compiladores foram uma das primeiras tocas de coelho que me fizeram me interessar por computação.
Um dos livros que li inúmeras vezes agora está disponível gratuitamente; embora seja sobre compiladores, não depuração, talvez valha entrar na sua lista de leitura.
“Compiler Design in C”
https://holub.com/compiler/
É um livro meio antigo, mas pode ser interessante.
Infelizmente, muitos livros são excessivamente acadêmicos demais, no estilo torre de marfim.
É muito impressionante ver esse nível de conhecimento e maturidade aos 17 anos.
Os temas tratados e explorados são o que se esperaria em nível de graduação, e, dentro disso, este projeto chega perto do nível de uma disciplina de pós-graduação.
Meus respeitos, e desejo uma carreira de sucesso.
Daqui a alguns anos, ele ainda será um jovem entusiasta de tecnologia, e provavelmente poderá fazer projetos ainda mais impressionantes.
Quando esse momento chegar, talvez não fique tão claro o quanto ele já estava à frente nessa idade. Há pessoas inteligentes que começam na casa dos 20 e também fazem coisas impressionantes; quando tiverem a mesma idade, para a maioria dos observadores todos parecerão pares.
Ainda assim, essa vantagem inicial pode se manter como uma vantagem injusta.
Daqui a anos ou décadas, ela pode aparecer como uma espécie de “arma secreta”.
Gosto de ler código de programadores jovens. É interessante ver como alguém com um nível de conhecimento bastante alto, mas ainda sem anos de experiência, projeta o todo.
O autor parece ser alguém que aprende rápido, e o resultado de 6 meses de trabalho é excelente.
Parece que jovens de 17 anos ainda sabem o que é um CD.
Talvez ainda não seja hora de aposentar o ícone de salvar em disquete :P
Legal. Lembro que, quando eu tinha essa idade, fiz uma biblioteca de gráficos 2D em Turbo Pascal, com o código de desenho real escrito em assembly otimizado à mão.
Mas isso foi antes de eu descobrir a internet; foi divertido de fazer, porém acabou como um projeto pessoal que ninguém usou.
É ótimo que você tenha chegado ao passo seguinte: transformar um projeto pessoal em algo que outras pessoas podem ver e talvez usar. No geral, está muito bem organizado, bem comentado, e o README é claro.
Colocar algo no mundo pode dar medo, mas é bom lembrar que o que as pessoas dizem, especialmente quando falam de você, diz tanto sobre elas quanto sobre o seu trabalho.
Aliás, na verdade estou mais interessado em Motes do que neste projeto, então vou experimentá-lo agora :)
O plugin do Emacs pode ter alguns comportamentos estranhos. Ainda assim, os scripts têm funcionado perfeitamente para mim nas últimas semanas.
Espero que goste :D
Muito legal.
Vou clonar o código hoje à noite e dar uma olhada.
Tenho interesses parecidos, então vou tentar contribuir com este projeto.
Deixei comentários na maior parte dos lugares, mas não sei se todos serão úteis.
Depuradores são especialmente difíceis de escrever, e este está bem bom.