-
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
Comentarios en Hacker News