2011-09-22 14 views
22

estoy tratando de utilizar las características de depuración inversa de GDB 7.3.1 en un proyecto multi-hilo (usando libevent), pero me sale el siguiente error:¿Cómo activo la depuración inversa en un programa multiproceso?

(gdb) reverse-step 
Target multi-thread does not support this command. 

De this question, pensé que tal vez fue un problema cargando libthread_db pero, cuando ejecuto el programa, el BGF 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 multi-hilo? ¿Es posible?

+0

Existe una [link] (http://stackoverflow.com/questions/6625486/reverse-step-multithread-error) a una pregunta similar aquí. – Martin

+0

Sí, lo sé, me vinculé a esa pregunta por mi cuenta. – rps

Respuesta

22

Necesitas activa el objetivo de instrucción-grabación, mediante la ejecución del comando

record 

desde el punto donde se quiere ir hacia delante y hacia atrás (recordemos que la grabación se ralentizar considerablemente la ejecución, especialmente si usted tiene varios hilos)

que he 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); 
+0

Cuando hago 'record' obtengo un error:' El objetivo del registro del proceso no puede depurar el inferior en el modo non-stop (non-stop) .' –

+4

try 'set non-stop off' y/o' set target-async off', estas opciones podrían ser ciertas por defecto en las últimas versiones de GDB – Kevin

Cuestiones relacionadas