Можно ли остановить один поток во время отладки в Linux? - PullRequest
16 голосов
/ 02 февраля 2012

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

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

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

Ответы [ 3 ]

3 голосов
/ 04 февраля 2012

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

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

  • Если используется CLI, пагинация прерывается без остановки:
    отключить пагинацию

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

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

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

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

  • Показать текущую настройку без остановок:
    показатьнон-стоп

Рекомендации:
http://sourceware.org/gdb/onlinedocs/gdb/Non_002dStop-Mode.html#Non_002dStop-Mode

0 голосов
/ 12 февраля 2012

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

0 голосов
/ 08 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...