Остановить GDB при переключении потоков - PullRequest
2 голосов
/ 03 ноября 2011

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

Допустим, у меня запущены два потока POSIX (поток A и поток B), и я хочу, чтобы gdb остановился, когда поток A приостанавливается, а поток B продолжает выполнение (и наоборот).

1 Ответ

4 голосов
/ 03 ноября 2011

Я хочу, чтобы gdb остановился, когда поток A приостанавливается, а поток B продолжает выполнение

В вашем вопросе используется одноядерный компьютер, который в наше время встречается крайне редко.

Если у вас многоядерный процессор, тогда оба A и B будут выполняться одновременно, и ваш вопрос не имеет смысла.

Даже если вы выполняете на одноядерном процессореCPU, функция, которую вы запрашиваете, будет (я ожидаю) в основном бесполезной: типичная многопоточная программа будет переключаться между двумя потоками десятки тысяч раз, прежде чем достигнет какого-либо «интересного» кода.Конечно, вы не хотите continue 10000 раз?

При отладке многопоточного кода обычно вы хотите assert, который различные инварианты хранят в течение выполнения программы.Установка точек останова и пошагового перехода редко помогает в многопоточной отладке.

...