- 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
Comentários do Hacker News
Muito legal. Há muito tempo tive a chance de pedir recursos aos designers de processadores da Intel
O suporte a Noir faz sentido porque o rastreamento de execução é especialmente valioso em provas ZK
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
Parece legal, mas em sistemas de produção os arquivos de rastreamento vão crescer muito rápido
Obrigado por fortalecer o ecossistema Nim
Muito animado com isso. Já doei no Open Collective
Parabéns pelo lançamento. Vocês fizeram um trabalho excelente até aqui