Я хочу, чтобы остановить GDB, когда поток А приостанавливается и поток B продолжает выполнение
Ваш вопрос предполагает одноядерный компьютер, которые являются чрезвычайно редкими в наши дни.
Если у вас многоядерный процессор, то оба A и B будут выполняться одновременно, и ваш вопрос не имеет смысла.
Даже если предположить, что вы выполняете одноядерный процессор, функция, о которой вы просите, будет в основном бесполезной: типичная многопоточная программа будет переключаться между двумя потоками в течение десятков тысяч раз до достигая любого «интересного» кода. Неужели вы не хотите continue
10,000 раз?
При отладке многопоточного кода обычно вы должны указать assert
, что во время выполнения программы сохраняются различные инварианты. Установка точек останова и однократного шага редко помогает в многопоточной отладке.
Я использую операционную систему QNX на одном процессоре во встроенной системе. Возможно, я ошибаюсь, но не разные потоки одного и того же процесса запускаются последовательно на одном процессоре - даже на многоядерном процессоре? – MBober
Да, вы ошибаетесь. Весь смысл многопоточности заключается в том, чтобы позволить одному приложению одновременно использовать более одного ядра в многоядерной машине *. –
Проблема в том, что моя программа отключает всю ОС, поэтому я не могу быть уверен, что все сообщения отладки доставляются до сбоя. Все работает нормально, когда я просматриваю программу. Вот почему я думаю, что это вопрос времени. Поэтому мне нужно выяснить, какой поток работает, когда нужно проследить проблему. Я заметил, что gdb останавливается на SIG32, который отправляется в поток, когда его приоритет был изменен. Я надеялся, что есть эквивалентный сигнал о возобновлении потока, на котором gdb может остановиться. – MBober