multithreading - que - multihilos sistemas operativos
¿Cómo habilito la depuración inversa en un programa multihilo? (1)
Para hacer esto, necesita activar el objetivo de grabación de instrucciones, ejecutando el comando
record
desde el punto en el que desea avanzar y retroceder (recuerde que la grabación ralentizará significativamente la ejecución, especialmente si tiene varios subprocesos)
Acabo de comprobar que está funcionando correctamente:
(gdb) info threads
Id Target Id Frame
2 Thread 0x7ffff7860700 (LWP 5503) "a.out" hello (arg=0x601030) at test2.c:16
* 1 Thread 0x7ffff7fca700 (LWP 5502) "a.out" main (argc=2, argv=0x7fffffffe2e8) at test2.c:47
...
(gdb) next
49 p[i].id=i;
(gdb) reverse-next
47 for (i=0; i<n; i++)
...
17 printf("Hello from node %d/n", p->id);
(gdb) next
Hello from node 1
18 return (NULL);
(gdb) reverse-next
17 printf("Hello from node %d/n", p->id);
Estoy tratando de usar las funciones de depuración inversa de gdb 7.3.1 en un proyecto de subprocesos múltiples (usando libevent), pero obtengo el siguiente error:
(gdb) reverse-step
Target multi-thread does not support this command.
A partir de esta pregunta , pensé que quizás era un problema cargar libthread_db pero, cuando ejecuto el programa, gdb dice:
Starting program: /home/robb/slug/slug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
¿Cómo puedo habilitar la depuración inversa con gdb 7.3.1 en un proyecto de subprocesos múltiples? ¿Es posible?