Как включить обратную отладку в многопоточной программе?

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

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

Из этот вопрос, я подумал, что это была проблема загрузки 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

Вам нужно активировать целевую запись записи, выполнив команду

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);