16 puntos por GN⁺ 2025-03-07 | 1 comentarios | Compartir por WhatsApp
  • Depurador de viaje en el tiempo fácil de usar que admite varios lenguajes de programación
    • Registra la ejecución del programa para generar archivos de traza independientes y compartibles, y permite moverse hacia adelante y hacia atrás en la ejecución dentro de un entorno GUI mientras se consulta el historial de cada ubicación de memoria
  • Ventajas de la depuración de viaje en el tiempo
    • Permite resolver con facilidad bugs difíciles de reproducir: si se cuenta con una grabación de la ejecución en la que ocurrió el bug, es posible identificar la causa en menos de 30 minutos
    • Resolver bugs es más fácil cuando se conoce el origen de un valor
      • Si se produce una salida inesperada en el programa, se puede hacer clic en ese evento para ver de inmediato el punto donde se originó el problema
      • CodeTracer rastrea dónde se generó ese valor y ayuda a encontrar la causa raíz del bug con solo unos pocos movimientos
      • Se puede explorar libremente moviéndose hacia atrás y hacia adelante en cualquier momento de la ejecución del programa
  • El trazado usa un formato abierto, y hay proyectos en curso para dar soporte a lenguajes como Ruby y Python
    • Integración planeada con el backend de RR para admitir depuración de lenguajes de programación de sistemas como C/C++, Rust, Nim, D, Zig, Go, Fortran y FreePascal

Funciones principales de CodeTracer

Depuración omnisciente (Omniscience)

  • Permite ver al instante los valores pasados y futuros de las variables en una línea específica de código durante la ejecución
  • Facilita explorar los cambios en los valores de variables dentro de bucles
  • Distingue claramente entre el código ejecutado y el que no se ejecutó

Tracepoints

  • Permiten ver al instante los cambios en los valores de las variables del programa sin ejecutar código adicional
  • Facilitan agregar condiciones, llamadas a funciones, salida de datos y más para depurar

Call Trace

  • Ofrece no solo un stack trace simple, sino el árbol completo de llamadas a funciones de toda la ejecución del programa
  • Se puede explorar fácilmente mediante filtrado y ordenamiento

Explorador de estado e historial (State and History Explorer)

  • Permite rastrear el historial de cambios de valor de todas las variables
  • Permite saltar de inmediato al punto del código donde cambió el valor de una variable
  • Rastrea automáticamente el valor original de variables copiadas para facilitar el análisis de bugs

Registro de eventos (Event Log)

  • Presenta en orden cronológico los eventos importantes del programa
  • Al hacer clic en un evento, se puede ir de inmediato al código de ese momento

Salida de terminal (Terminal Output)

  • Reproduce y registra la salida de stdout y stderr como si fuera una terminal, para revisar la salida del programa grabado
  • Al hacer clic, se puede ir a la ubicación exacta del código donde se produjo esa salida

Navegación con mouse (Mouse Stepping)

  • Permite moverse de inmediato a partes específicas del código usando el mouse
    • Ir a línea: clic del botón central (Ctrl+clic también disponible)
    • Entrar a función: doble clic en una llamada de función para entrar (Ctrl+Alt+clic también disponible)
    • Opciones adicionales: se pueden explorar funciones extra desde el menú de clic derecho

Scratchpad

  • Permite fijar los valores de variables en un momento específico para compararlos y analizarlos
  • Ayuda a analizar problemas comparando visualmente el flujo de ejecución del código

Comandos CLI de CodeTracer

  • ct run <application> - Ejecuta el programa y lo graba automáticamente
  • ct record <application> - Genera un archivo de traza
  • ct replay - Reproduce el archivo de traza generado
  • ct replay <program-name> - Carga el último registro de ejecución
  • ct replay --id=<trace-id> - Ejecuta con un ID de traza específico
  • ct replay --trace-folder=<trace-folder> - Ejecuta un archivo de traza dentro de una carpeta específica
  • ct help / ct --help - Muestra los comandos disponibles
  • ct version - Muestra la versión actual

Atajos de teclado

  • Los atajos predeterminados siguen un estilo familiar para usuarios de Visual Studio™
  • Las funciones inversas de depuración se ofrecen junto con la tecla Shift (F10 = "siguiente paso", Shift+F10 = "paso anterior")
  • Es posible personalizar los atajos editando el archivo ~/.config/codetracer/.config.yml

1 comentarios

 
GN⁺ 2025-03-07
Comentarios en Hacker News
  • Está genial. Hace mucho tiempo tuve la oportunidad de pedir funciones a los diseñadores de procesadores de Intel

    • Pedí un temporizador de ticks del sistema para marcar logs, y lo implementaron
    • También pedí una máscara de bus y un registro de valores que activaran interrupciones de depuración, y eso también lo implementaron
    • Pedí historial del origen de los saltos, pero eso no se hizo realidad
    • En ese tiempo Intel vendía sondas de depuración caras que registraban el bus
    • Mi historial de saltos podría haber eliminado la necesidad para la mayoría de los usuarios
    • Al final no se concretó, y nosotros volvimos a compilar el código de "debug" para agregar tracing y más tracing
  • El soporte para Noir tiene sentido porque las trazas de ejecución son especialmente valiosas en pruebas ZK

    • Espero implementaciones para Python y Ruby
    • Por la naturaleza dinámica de estos lenguajes, a veces los bugs son especialmente difíciles de encontrar
    • Me pregunto si alguien aquí ha usado Noir
    • También me da curiosidad el overhead de rendimiento del mecanismo de trazado
    • Y me pregunto si hay planes de soporte para JavaScript/TypeScript para desarrollo web
  • Si usas Clojure o ClojureScript, recomiendo revisar FlowStorm

  • Noir es un lenguaje específico de dominio para sistemas de pruebas SNARK

  • Me pregunto por qué escribieron CodeTracer en dos lenguajes

  • Me encanta. Siempre quise algo así

    • Más adelante pienso probarlo con Python
    • Ojalá también tuviera soporte para JS/TS
    • Me pregunto si el depurador rr soporta MacOS, Windows y Android
    • También me pregunto qué tan pesado es grabar para apps comunes
    • También estaría bueno que un LLM pudiera aportar contexto a través de un servidor MCP, o dejar que el LLM elija qué historial de variables quiere ver
    • Una función de filtrado de grabación también estaría buena
  • Se ve genial, pero en sistemas de producción los archivos de traza van a crecer muy rápido

    • Me pregunto cómo asociarán el archivo con una sesión específica
  • Gracias por construir el ecosistema de Nim

  • Estoy muy entusiasmado. Ya doné en Open Collective

    • El equipo está lleno de gente talentosa
    • Tienen una interfaz genial para depuración con viaje en el tiempo
    • Si usan rr, no va a poder correr en macOS
    • Por suerte, los lima vms se pueden crear fácilmente de forma remota
  • Felicidades por el lanzamiento. Han hecho un trabajo excelente hasta ahora

    • No lo necesito en este momento, pero voy a seguir de cerca el avance de backends alternativos y el soporte para más lenguajes de programación
    • Gracias