2011-09-22 1 views
22

Je suis en train d'utiliser les fonctionnalités de débogage inverse de gdb 7.3.1 sur un projet multi-thread (en utilisant libevent), mais je reçois l'erreur suivante:Comment activer le débogage inverse sur un programme multithread?

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

De this question, je pensais que peut-être que a été un problème de chargement libthread_db mais, quand je lance le programme, gdb dit:

Starting program: /home/robb/slug/slug 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/libthread_db.so.1". 

Comment puis-je activer le débogage inverse avec gdb 7.3.1 sur un projet multi-thread? C'est possible?

+0

Il existe un [lien] (http://stackoverflow.com/questions/6625486/reverse-step-multithread-error) à une question similaire ici. – Martin

+0

Oui, je sais, j'ai lié à cette question dans le mien. – rps

Répondre

22

Vous devez activer la cible d'enregistrement d'instructions, en exécutant la commande

record 

du point où vous voulez aller en avant et en arrière (rappelons que l'enregistrement ralentira considérablement l'exécution, surtout si vous avez plusieurs threads)

Je viens de vérifier qu'il fonctionne correctement:

(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

Quand j'enregistre 'record', j'obtiens une erreur:' La cible d'enregistrement de processus ne peut pas déboguer inférieur en mode non-stop (non-stop) .' –

+4

try 'set non-stop off' et/ou' set-async off', ces options peuvent être vraies par défaut dans les dernières versions de GDB – Kevin

Questions connexes