2011-09-22 15 views
22

sto cercando di utilizzare le funzionalità di debug inversa di gdb 7.3.1 su un progetto multi-threaded (utilizzando libevent), ma ottengo il seguente errore:Come abilitare il debug inverso su un programma multi-thread?

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

Da this question, ho pensato che forse che è stato un problema caricando libthread_db ma, quando ho eseguito il programma, gdb dice:

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

Come posso attivare il debug inverso con gdb 7.3.1 su un progetto multi-threaded? È possibile?

+0

Esiste una [link] (http://stackoverflow.com/questions/6625486/reverse-step-multithread-error) per una domanda simile qui. – Martin

+0

Sì, lo so, mi sono collegato a quella domanda da solo. – rps

risposta

22

È necessario attiva il target istruzione-registrazione, eseguendo il comando

record 

dal punto in cui si vuole andare avanti e indietro (ricordiamo che la registrazione sarà rallentare in modo significativo l'esecuzione, in particolare se si dispone di più thread)

ho appena controllato che sta funzionando correttamente:!

(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

Quando eseguo 'record' viene visualizzato un errore:' L'obiettivo di registrazione del processo non può eseguire il debug in modo non-stop (non-stop) .' –

+4

provare 'set non-stop off' e/o' set target-async off', queste opzioni potrebbero essere true per impostazione predefinita nelle ultime versioni di GDB – Kevin

Problemi correlati