Подтвердить что ты не робот

Отладка нескольких потоков в eclipse

В методе, который я отлаживаю, я создаю новый поток. Мне нужно отладить выполнение этого нового потока, а не родительского потока. Как я могу сделать это в eclipse?

4b9b3361

Ответ 1

Поместите точку останова на метод "запуска" нового потока. Это прекратит выполнение после начала потока.

Ответ 2

В дополнение к ответу Шамит Верма:

При отладке многопоточных Java- приложений лучше не использовать стандартные точки останова, которые приостанавливают только поток, в котором установлена точка останова. Определение стандартной точки останова в вашем приложении приведет к разрыву только связанного потока. Другие потоки все еще будут работать. В eclipse отладчик по какой-то причине заставит отладчик пропускать точки останова, если другие потоки уже запущены.

Решение для отладки Java:

Определите точку останова в нужном потоке (метод @Run(), который я ожидаю..), щелкните правой кнопкой мыши на точке останова → свойства точки останова.

В диалоговом окне свойств точки останова установите флажок "Приостановить ВМ" вместо "Приостановить поток".

Если вы сделаете это, ваша виртуальная машина будет приостановлена в случае достижения точки останова.

В C/C++ CDT используйте set-scheduler- lock on :

Как говорит @Employed Russian в ответе на другой вопрос, команда GDB:

set scheduler-locking on 

приведет к тому, что другие потоки C/C++ останутся приостановленными, в то время как текущая нить будет запущена. Эту команду можно выполнить в Eclipse/CDT Debug, приостановив выполнение программы и открыв перспективу "Debugger Console" и введя: set scheduler-lock on. Позже ее можно вернуть в нормальное состояние с помощью: set scheduler-lock off

См. Документацию GDB для получения дополнительной информации о блокировке планировщика и режиме без остановки, который позволяет другим потокам работать при остановке одного потока.

Ответ 3

В дополнение к Эрику Каджу ответ. Если вы отлаживаете CDT (это может быть применимо и для Java, я не уверен в этом), то

  • Поместите точку останова на метод run() (или ее эквивалент). Или любая точка, в которой вы уверены, что требуемые потоки и не требуемый поток (те, которые будут удалены фильтром) будут запущены.
  • Запустить сеанс отладки.
  • Когда точка останова в запуске попадает, вы можете перейти к другой точке останова, включить эту точку останова, если она была отключена. Затем щелкните правой кнопкой мыши на точке останова → перейдите в "Фильтры", теперь вы можете выбрать поток, по которому вы хотите, чтобы точка останова была включена, и вы можете снять отметку с остальной части потоков. Таким образом, эта точка останова будет удалена только для этого потока.

Недостатком является то, что эта процедура должна повторяться для каждого сеанса отладки. Если кто-то может обеспечить короткое сокращение, тогда это будет хорошо.

Ответ 4

в вашем окне отладки eclipse вы можете перетаскивать потоки, чтобы приземлиться на нужный номер рабочего потока, и продолжить свой последовательный поиск (F6). введите описание изображения здесь