16 pontos por GN⁺ 2025-03-07 | 1 comentários | Compartilhar no WhatsApp
  • Depurador de viagem no tempo fácil de usar, com suporte a várias linguagens de programação
    • Registra a execução do programa para gerar arquivos de trace independentes e compartilháveis, e permite avançar e voltar na execução em um ambiente GUI, além de verificar o histórico de todas as posições de memória
  • Vantagens da depuração com viagem no tempo
    • É possível resolver facilmente bugs difíceis de reproduzir: se houver uma gravação da execução em que o bug ocorreu, é possível identificar a causa em até 30 minutos
    • Resolver bugs fica mais fácil quando se conhece a origem dos valores
      • Se uma saída inesperada ocorrer no programa, é possível clicar no evento e verificar imediatamente onde o problema surgiu
      • O CodeTracer rastreia onde esse valor foi criado, ajudando a encontrar a causa raiz do bug com apenas alguns movimentos
      • É possível navegar livremente para frente e para trás em qualquer momento da execução do programa
  • O tracing usa um formato aberto, e estão em andamento projetos de suporte a linguagens como Ruby e Python
    • Há planos de integrar com o backend RR para dar suporte à depuração de linguagens de programação de sistemas como C/C++, Rust, Nim, D, Zig, Go, Fortran e FreePascal

Principais recursos do CodeTracer

Onisciência (Omniscience)

  • Permite verificar instantaneamente os valores passados e futuros das variáveis em uma linha específica de código durante a execução
  • Facilita a exploração de mudanças nos valores das variáveis dentro de loops
  • O código executado e o não executado são claramente diferenciados

Tracepoints

  • Permite verificar instantaneamente mudanças nos valores das variáveis dentro do programa sem executar código adicional
  • É possível adicionar facilmente condicionais, chamadas de função, saídas de dados etc. para depuração

Call Trace

  • Em vez de um simples stack trace, fornece a árvore completa de chamadas de função de toda a execução do programa
  • Pode ser explorado facilmente com filtragem e ordenação

Explorador de estado e histórico (State and History Explorer)

  • Permite rastrear todo o histórico de alterações de valor de todas as variáveis
  • Permite ir imediatamente ao ponto do código em que o valor de uma variável foi alterado
  • Rastreia automaticamente o valor original de variáveis copiadas, facilitando a análise de bugs

Log de eventos (Event Log)

  • Organiza e apresenta em ordem cronológica os eventos importantes do programa
  • Ao clicar em um evento específico, é possível ir imediatamente ao código daquele momento

Saída do terminal (Terminal Output)

  • Reproduz as saídas de stdout e stderr como em um terminal, permitindo verificar a saída do programa gravado
  • Ao clicar, é possível ir para a posição exata do código em que a saída foi gerada

Navegação com o mouse (Mouse Stepping)

  • Permite usar o mouse para ir imediatamente a partes específicas do código
    • Ir para linha: clique do meio do mouse (também é possível Ctrl+clique)
    • Entrar na função: clique duplo na chamada de função para entrar (Ctrl+Alt+clique também é possível)
    • Opções adicionais: recursos extras podem ser explorados no menu de clique com o botão direito

Scratchpad

  • Permite fixar os valores das variáveis em um momento específico para comparação e análise
  • Ajuda a analisar problemas comparando visualmente o fluxo de execução do código

Comandos da CLI do CodeTracer

  • ct run <application> - executa o programa e grava automaticamente
  • ct record <application> - cria um arquivo de trace
  • ct replay - reproduz o arquivo de trace criado
  • ct replay <program-name> - carrega o registro da última execução
  • ct replay --id=<trace-id> - executa com um ID de trace específico
  • ct replay --trace-folder=<trace-folder> - executa o arquivo de trace dentro de uma pasta específica
  • ct help / ct --help - mostra os comandos disponíveis
  • ct version - mostra a versão atual

Atalhos de teclado

  • Os atalhos padrão são familiares para usuários do Visual Studio™
  • Os recursos reversos das funções de depuração existentes são oferecidos com a tecla Shift (F10 = "próximo passo", Shift+F10 = "passo anterior")
  • É possível personalizar os atalhos editando o arquivo ~/.config/codetracer/.config.yml

1 comentários

 
GN⁺ 2025-03-07
Comentários do Hacker News
  • Muito legal. Há muito tempo tive a chance de pedir recursos aos designers de processadores da Intel

    • Pedi um timer de ticks do sistema para marcação de logs, e eles implementaram isso
    • Também pedi um registrador de máscara e valor do barramento para disparar interrupções de depuração, e isso também foi implementado
    • Pedi histórico da origem dos saltos, mas isso não se concretizou
    • Na época, a Intel vendia sondas de depuração caras que registravam o barramento
    • Meu histórico de saltos poderia ter eliminado essa necessidade para a maioria dos usuários
    • No fim, isso não aconteceu, e nós recompilávamos o código de 'debug' para adicionar rastreamento e mais rastreamento
  • O suporte a Noir faz sentido porque o rastreamento de execução é especialmente valioso em provas ZK

    • Estou esperando implementações para Python e Ruby
    • Por causa da natureza dinâmica dessas linguagens, às vezes os bugs são especialmente difíceis de encontrar
    • Fico curioso se alguém aqui já usou Noir
    • Também tenho curiosidade sobre a sobrecarga de desempenho do mecanismo de rastreamento
    • E também queria saber se há planos de suporte a JavaScript/TypeScript para desenvolvimento web
  • Se você usa Clojure ou ClojureScript, recomendo dar uma olhada no FlowStorm

  • Noir é uma linguagem específica de domínio para sistemas de prova SNARK

  • Fico curioso sobre por que o CodeTracer foi escrito em duas linguagens

  • Gostei muito. Sempre quis algo assim

    • Vou testar depois com Python
    • Também seria bom ter suporte a JS/TS
    • Fico curioso se o depurador rr oferece suporte a MacOS, Windows e Android
    • Também queria saber o quão pesado é o registro para aplicativos comuns
    • Também seria legal se um LLM pudesse fornecer contexto por meio de um servidor MCP, ou se o LLM pudesse escolher o histórico das variáveis que quer ver
    • Um recurso de filtragem de registro também seria bom
  • Parece legal, mas em sistemas de produção os arquivos de rastreamento vão crescer muito rápido

    • Fico curioso sobre como associar o arquivo a uma sessão específica
  • Obrigado por fortalecer o ecossistema Nim

  • Muito animado com isso. Já doei no Open Collective

    • A equipe está cheia de gente talentosa
    • Há uma interface muito boa para depuração com viagem no tempo
    • Se usar rr, não vai dar para rodar no macOS
    • Felizmente, VMs do lima podem ser criadas remotamente com facilidade
  • Parabéns pelo lançamento. Vocês fizeram um trabalho excelente até aqui

    • No momento não preciso disso, mas vou acompanhar a evolução de backends alternativos e o suporte a mais linguagens de programação
    • Obrigado