Как включить обратную отладку в многопоточной программе? - PullRequest
30 голосов
/ 22 сентября 2011

Я пытаюсь использовать функции обратной отладки gdb 7.3.1 в многопоточном проекте (используя libevent), но я получаю следующую ошибку:

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

От thisвопрос , возможно, я подумал, что это проблема загрузки libthread_db, но когда я запускаю программу, gdb говорит:

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

Как включить обратную отладку с помощью gdb 7.3.1 на несколькихрезьбовой проект?Возможно ли это?

1 Ответ

30 голосов
/ 23 сентября 2011

Для этого вам нужно активировать цель записи инструкций, выполнив команду

record

от точки, где вы хотите идти вперед и назад (помните, что запись значительно замедлит выполнение, особенно если у вас несколько потоков!)

Я только что проверил, что он работает правильно:

(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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...