Как продолжить один поток при отладке многопоточной программы в GDB?

У меня есть программа, которая использует два потока. Я поместил точку останова в обоих потоки. При запущении программы под gdb я хочу переключиться между потоками и заставить их работать. (поток t1 является активным и рабочим и поток t2; при приостановке на точке останова. Я хочу остановить выполнение T1 и выполнить T2).

Есть ли какой-либо способ, которым я могу запланировать потоки в gdb?

30
задан Ciro Santilli 新疆改造中心法轮功六四事件 2 May 2018 в 15:55
поделиться

2 ответа

используйте условия прерывания

(gdb) break frik.c:13 thread 28 if bartab > lim

см. Отладка с помощью GDB

Правка:

(gdb) break <thread_function_entry_point> thread 2
(gdb) break <thread_function_entry_point> thread 1
(gdb) thread 1
(gdb) continue
(gdb) ... thread 1 finishes
(gdb) thread 2
(gdb) continue

Вы можете поместить эти команды в файл .gdbrc.

1
ответ дан 27 November 2019 в 23:58
поделиться

По умолчанию GDB останавливает все потоки при достижении любой точки останова и возобновляет все потоков, когда вы вводите любую команду (например, continue , next , step , finish и т. Д.), Который требует, чтобы подчиненный процесс (тот, который вы отлаживаете) начал выполняться .

Однако вы можете сказать GDB не делать этого:

(gdb) help set scheduler-locking 
Set mode for locking scheduler during execution.
off  == no locking (threads may preempt at any time)
on   == full locking (no thread except the current thread may run)
step == scheduler locked during every single-step operation.
    In this mode, no other thread may run during a step command.
    Other threads may run while stepping over a function call ('next').

Итак, вам нужно установить точки останова, затем установить блокировку планировщика на , затем продолжить или ] finish в потоке 1 (поток 2 все еще остановлен), затем Ctrl-C, чтобы восстановить контроль над GDB, переключиться на поток 2, продолжить (поток 1 все еще остановлен) и т. д.

Осторожно: установив блокировку планировщика на , очень легко заставить подчиненный процесс самоблокироваться.

43
ответ дан 27 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: