1 puntos por GN⁺ 2024-07-22 | 1 comentarios | Compartir por WhatsApp
  • Introducción a rr

    • rr es una herramienta de depuración para C/C++ en Linux, pensada para complementar a gdb
    • Permite grabar una falla una vez y depurar esa grabación repetidamente
    • Hace posible depurar reproduciendo exactamente la misma ejecución cada vez
    • Ofrece ejecución inversa eficiente mediante gdb
  • Funciones de rr

    • Baja sobrecarga
    • Soporta la grabación y reproducción de diversas aplicaciones (Firefox, Chrome, QEMU, LibreOffice, etc.)
    • Permite grabar, reproducir y depurar cargas de trabajo multiproceso
    • Soporta scripting de gdb e integración con IDEs
    • Archivos de trazas duraderos y comprimidos, que pueden moverse entre máquinas
    • Ofrece un modo de caos para reproducir errores intermitentes
  • Experiencia de depuración con rr

    • Grabar una aplicación: rr record /your/application --args...
    • Depurar una ejecución grabada: rr replay
    • Depuración determinista de la traza grabada
    • Se pueden usar los comandos habituales de gdb
    • La ejecución inversa permite ir rápidamente al punto del problema
  • Videos

    • Video de demostración de grabación y reproducción de Firefox
    • Video que explica en detalle las funciones básicas de rr
    • Video de charla técnica avanzada de Robert O'Callahan
  • Primeros pasos

    • Compilar desde el código fuente: recomendado si los paquetes no funcionan
    • Se ofrecen métodos de instalación para Fedora y Ubuntu
  • Antecedentes y motivación

    • Fue desarrollado para facilitar la depuración de fallas intermitentes
    • La reproducción determinista permite que la información obtenida durante la depuración siga siendo válida
    • La ejecución inversa hace que el proceso de depuración sea más sencillo
    • rr se usa regularmente en muchos proyectos grandes y pequeños
  • Cómo funciona rr

    • Graba procesos de espacio de usuario en Linux y captura todas las entradas provenientes del kernel
    • Durante la reproducción, garantiza el flujo de control a nivel de instrucción, la memoria y el contenido de los registros
    • La distribución de memoria, las direcciones de objetos y los valores de registros se mantienen iguales
    • Se vuelve aún más potente cuando se usa junto con fuzzers e inyectores aleatorios de fallas
  • El contexto de rr

    • La depuración con grabación y reproducción es una idea antigua
    • Objetivos de diseño centrados en Firefox
    • Facilidad de despliegue: corre en kernels Linux comunes y no requiere cambios en la configuración del sistema
    • Baja sobrecarga en tiempo de ejecución
    • Diseño simple: evita técnicas complejas
  • Limitaciones

    • Emula una máquina de un solo núcleo
    • No puede grabar procesos que comparten memoria con elementos fuera del árbol de grabación
    • Requiere una CPU x86 moderna o ciertas CPU ARM específicas
    • Necesita conocer todas las llamadas al sistema que ejecuta el proceso grabado
    • Requiere adaptarse a cambios del kernel, actualizaciones de bibliotecas del sistema y nuevas familias de CPU
  • Material adicional de referencia

    • Informe técnico ampliado
    • Wiki de rr
    • Se pueden hacer preguntas en la lista de correo o en #rr de chat.mozilla.org

Resumen de GN⁺

  • rr es una herramienta potente para depurar C/C++ en Linux y mejora mucho la eficiencia gracias a la reproducción determinista
  • Soporta diversas aplicaciones y cargas de trabajo multiproceso, y resulta práctica por su baja sobrecarga
  • La función de ejecución inversa facilita aún más el proceso de depuración
  • Puede depurar aplicaciones complejas como Firefox, por lo que es útil de forma general
  • Herramientas con funciones similares incluyen gdb y Valgrind

1 comentarios

 
GN⁺ 2024-07-22
Comentarios en Hacker News
  • GDB ya ofrece una función de depuración inversa
  • rr ofrece más funciones y flexibilidad
  • Se ha usado rr con éxito para hacer ingeniería inversa en bases de código grandes
  • El depurador requiere entender la lista de símbolos y las llamadas al sistema
  • Hay curiosidad sobre si rr también funciona con lenguajes como Rust, Zig, Odin y Nim
  • Probablemente no funcione con lenguajes de memoria administrada como Python, JS y C#
  • Hubo un proyecto que intentó portarlo a Rust, pero fue abandonado
  • Sería interesante un estudio comparativo sobre el impacto y los beneficios de reescribir de C++ a Rust
  • rr es muy útil, pero muchas veces no logra reproducir bugs de concurrencia
  • Sería muy útil que algunos lenguajes integraran rr directamente en sus herramientas
  • La depuración de C/C++ con rr es muy potente y mejora mucho el proceso de depuración
  • Pernosco se basa en rr y añade una base de datos consultable de toda la ejecución del programa
    • Si haces clic en un valor incorrecto, te explica de inmediato de dónde salió ese valor
    • Puedes preguntarle al depurador qué fue lo que realmente pasó sin entender el código
  • Hay curiosidad sobre si también puede usarse cuando el código C/C++ se compila como una dll/so llamada desde Python
  • Hay curiosidad sobre si ya se resolvieron los problemas de rr relacionados con CPUs Ryzen