Как включить обратную отладку в многопоточной программе?
Я пытаюсь использовать функции обратной отладки 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);