2011-09-22 12 views
22

Próbuję użyć odwrotne funkcje debugowania gdb 7.3.1 na wielowątkowych projektu (przy użyciu libevent), ale pojawia się następujący błąd:Jak włączyć funkcję odwrotnego debugowania w programie wielowątkowym?

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

Od this question, myślałem, że może to był problem ładowania libthread_db ale gdy uruchamiam program, gdb mówi:

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

Jak można włączyć wstecznego debugowania z gdb 7.3.1 na wielowątkowym projektem? Czy to możliwe?

+0

Istnieje [LINK] (http://stackoverflow.com/questions/6625486/reverse-step-multithread-error) do podobnych pytanie tutaj. – Martin

+0

Tak, wiem, powiązałem to pytanie z moim własnym. – rps

Odpowiedz

22

Trzeba aktywny cel instrukcja-nagrywania, wykonując polecenia

record 

od punktu, w którym chcesz iść do przodu i do tyłu (należy pamiętać, że nagranie będzie znacząco spowolnić wykonanie, zwłaszcza jeśli masz kilka wątków)

właśnie sprawdziliśmy, że wszystko działa poprawnie:

(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

Gdy wykonuję 'record', pojawia się błąd:' Obiekt zapisu procesu nie może debugować gorszej jakości w trybie non-stop (non-stop). ' –

+4

spróbuj' set non-stop off' i/lub 'set target-async off', te opcje mogą być domyślnie prawdziwe w najnowszych wersjach GDB – Kevin

Powiązane problemy