GNU/Linux >> Tutoriales Linux >  >> Linux

RR - Depurador de software de grabación y reproducción

A lo largo de los años, he escrito extensamente sobre cómo solucionar problemas relacionados con el software en el mundo de TI en general y en Linux en particular. Después de todo, este ha sido mi pan y mantequilla durante mucho tiempo, y todavía estoy muy interesado en el arte de resolver problemas. Uno de los temas que cubrí profusamente es gdb, el depurador de software por excelencia. El único problema es que necesitas pensar para ganar.

Lo que quiero decir con esto:gdb es excelente si puede reproducir sus problemas. Pero si ejecuta el software en una configuración de producción, es posible que no tenga el lujo de seguir desencadenando problemas una y otra vez. La capacidad de capturar y luego reproducir errores es una gran ventaja, y viene en forma de RR, una herramienta diseñada para ayudar a depurar ejecuciones de software registradas de manera precisa y determinista. A ver que da.

RReady, ready, set

En esencia, RR es gdb y gdb es RR. La idea es simple y la implementación elegante. Ejecuta su herramienta con rr, captura la ejecución (y la falla) y luego reproduce la grabación tantas veces como desee, fuera del entorno de producción. Además, si hay problemas escurridizos, es posible que pueda tomar un escenario repetible, lo que le permite descubrir más rápidamente la causa raíz y solucionar el problema.

Instalé y configuré RR en Fedora 32. Bastante sencillo. Ahora, la ejecución requiere cierta atención a los detalles. Si ejecuta el programa como un usuario normal, es posible que vea una advertencia de que RR en realidad no puede obtener eventos privilegiados del kernel. Puede cambiar esto, y luego no necesita sudo. Similar a lo que hemos visto con perf realmente. Dulce.

rr record ./seg
rr necesita /proc/sys/kernel/perf_event_paranoid <=1, pero es 2.
Cámbielo a 1, o use 'rr record -n' (lento).
Considere colocar 'kernel.perf_event_paranoid =1' en /etc/sysctl.conf

Hay muchas maneras de cambiar esto. Asigne un valor a /proc, use sysctl -w para escribir el valor, edite manualmente el archivo /etc/sysctl.conf y luego vuelva a cargar la configuración. Cualquiera que sea la forma que elija, tendrá un mejor rendimiento y la capacidad de rastrear todos los eventos necesarios.

sudo sysctl -w kernel.perf_event_paranoid=1

Ejemplo de falla de segmento

Para ver cuán práctico y útil es RR, decidí usar el mismo ejemplo de falla de segmento del tutorial de gdb. Básicamente, un bucle con malloc() que conducirá a una falla de segmentación:

#incluir
#incluir

main()
{
int *puntero;
int yo;
puntero =malloc(tamaño(int));
para (i =0; 1; i++)
{
puntero[i]=i;
printf("puntero[%d] =%d\n", i, puntero[i]);
}
retorno(0);
}

gcc -g seg.c -o seg
seg.c:4:1:advertencia:el tipo de retorno predeterminado es 'int' [-Wimplicit-int]
4 | principal()
| ^~~~

Grabación de RR y reproducción de RR

Las dos funciones principales que utiliza RR:grabar y reproducir.

rr record ./seg
...
puntero[33621] =33621
puntero[33622] =33622
puntero[33623] =33623
Falla de segmentación (núcleo desechado)

Tenga en cuenta que la ejecución real será más lenta de lo habitual. Esto significa que si tiene problemas que dependen del tiempo, RR puede no ser útil. Bastante similar a lo que hemos visto con strace realmente. Desea problemas deterministas que se puedan replicar de manera confiable (es decir, en las condiciones adecuadas).

De todos modos, una vez que tengamos el problema registrado, podemos reproducirlo:

rr reproducir

La primera vez que se cargó RR, me advirtió que los símbolos de depuración no estaban disponibles; esto es muy importante si realmente desea poder solucionar el problema. No es específico de RR de ninguna manera, pero esto es algo a tener en cuenta:puede instalar los paquetes que faltan si lo desea, el programa incluso enumera el comando exacto que puede usar para hacerlo.

Depuración remota usando 127.0.0.1:7747
Lectura de símbolos de /lib64/ld-linux-x86-64.so.2...
(No se encontraron símbolos de depuración en /lib64/ld-linux-x86 -64.so.2)
0x00007f25ce73e110 en _start () de /lib64/ld-linux-x86-64.so.2
Falta información de depuración separada, use:dnf debuginfo-install glibc-2.31-2 .fc32.x86_64--Escriba para más, q para salir, c para continuar sin buscar--

Una vez cargada la interfaz RR, estás en la tierra gdb. Los comandos son los mismos. Puede establecer puntos de interrupción y luego usar condiciones para cuándo esos puntos de interrupción deberían activarse realmente y detenerse la ejecución de la tarea.

romper 10
condición 1 i ==33610
continuar

Y la sesión de depuración se parecerá a:

(rr) siguiente
puntero[33611] =33611
9 para (i =0; 1; i++)
(rr) siguiente
11 puntero[i]=i;
(rr) siguiente

Programa recibido señal SIGSEGV, Fallo de segmentación.
0x000000000040116a en main () en seg.c:11
11 puntero[i]=i;

Ahora, puede profundizar y realizar comprobaciones adicionales. La principal diferencia es que todo esto ocurre en una instancia grabada de su software, por lo que no interfiere potencialmente con el uso real de sus servicios y aplicaciones. Idealmente, necesita una configuración inteligente que pueda detectar problemas automáticamente y registrarlos, pero esa es una historia completamente diferente.

Conclusión

No he pasado mucho tiempo usando RR, pero me gusta lo que veo. El programa utiliza los sólidos y familiares fundamentos de gdb, lo que significa que no necesita volver a aprender a solucionar problemas de Linux desde cero. Además de eso, agrega una capa de poderosa flexibilidad, lo que le permite minimizar la presión del tiempo que a menudo se asocia con problemas de TI, como fallas de software. Puede grabar y reproducir a su conveniencia. Esto también significa que es más probable que encuentre el problema, especialmente si se trata de ejecuciones largas y complicadas de tareas.

Con suerte, encontrará útil este breve tutorial. En un mundo en el que hay diez chefs para cada comida y cincuenta herramientas redundantes de Linux para cada necesidad, es bueno ver un software que ofrece una funcionalidad adicional significativa en lugar de una repetición de lo mismo. Bueno, ahora tienes otra utilidad en tu arsenal, lo que también significa una excusa menos para no poder resolver esos molestos problemas de software lo suficientemente rápido. Así es como funciona, no.


Linux
  1. La evolución de los gestores de paquetes

  2. Una introducción al editor vi

  3. Conceptos básicos de comandos de Linux:printf

  4. RR - Depurador de software de grabación y reproducción

  5. software de esteganografía

Revisión de EndeavourOS - Devoró mi disco...

Revisión de Manjaro 20.1.2 Mikah Plasma

Plasma 5.20 y escalado de pantalla - Excelente

Optimización de Notepad++ en Linux

Ubuntu 18.04 vs. Fedora 28

Los 20 mejores depuradores de Linux para ingenieros de software modernos