2011-11-03 6 views
2

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

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

ответ

3

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

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

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

Даже если предположить, что вы выполняете одноядерный процессор, функция, о которой вы просите, будет в основном бесполезной: типичная многопоточная программа будет переключаться между двумя потоками в течение десятков тысяч раз до достигая любого «интересного» кода. Неужели вы не хотите continue 10,000 раз?

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

+0

Я использую операционную систему QNX на одном процессоре во встроенной системе. Возможно, я ошибаюсь, но не разные потоки одного и того же процесса запускаются последовательно на одном процессоре - даже на многоядерном процессоре? – MBober

+0

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

+0

Проблема в том, что моя программа отключает всю ОС, поэтому я не могу быть уверен, что все сообщения отладки доставляются до сбоя. Все работает нормально, когда я просматриваю программу. Вот почему я думаю, что это вопрос времени. Поэтому мне нужно выяснить, какой поток работает, когда нужно проследить проблему. Я заметил, что gdb останавливается на SIG32, который отправляется в поток, когда его приоритет был изменен. Я надеялся, что есть эквивалентный сигнал о возобновлении потока, на котором gdb может остановиться. – MBober

 Смежные вопросы

  • Нет связанных вопросов^_^