Можно ли остановить один поток во время отладки в Linux?

То, что я хотел бы знать, это, если это возможно, внутри сеанса отладки в Linux (read: gdb:)), чтобы остановить выполнение одного потока, оставив другие потоки для запуска.

Если кому-то интересно узнать, зачем продолжать читать: Я написал программный контрольный класс С++ (используя Qt). Я тестировал его с помощью простой многопоточной программы, но я бы хотел протестировать код, как только я интегрирую его в реальное приложение. Если бы я мог остановить поток от отладчика, это упростит этот этап тестирования.:)

Приветствия Sergio

Ответы

Ответ 1

Используйте эту последовательность команд перед запуском или подключением к вашей программе:

  • Включить асинхронный интерфейс:
    set target-async 1

  • При использовании CLI разбиение на страницы прерывается без остановок:
    установить разбиение на страницы

  • Включить его:
    установить без остановок на

Используйте эти команды для управления настройкой без остановки:

  • Включить выбор режима без остановок:
    установить без остановок на

  • Отключить выбор режима без остановок:
    set non-stop off

  • Показывать текущую настройку без остановки:
    show non-stop

Литература:
http://sourceware.org/gdb/onlinedocs/gdb/Non_002dStop-Mode.html#Non_002dStop-Mode

Ответ 2

Вы можете использовать отладчик totalview для этого

Ответ 3

Если эта небольшая вариация в порядке, вы можете послать потоку сигнал STOP (а не как команду gdb в gdb - это вариант) и отладить все остальное. Сигнал CONT позволяет продолжить поток.