Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Отладка конкретного потока

При отладке создаются 8 потоков, каждый из которых выполняет одну и ту же функцию параллельно. Как можно проследить путь через F11 от начала и до конца конкретного потока? Чтобы не шли, при нажатии F11, все потоки параллельно в отладке, так мало что можно понять.


Ответ

Например, в Visual Studio вы можете заморозить остальные потоки на время:

Не забудьте разморозить их потом! А то один поток будет ожидать окончания другого вечно.
Если другие потоки должны тем временем работать, вы можете поставить условную точку останова, в которой будете проверять ID потока (правая кнопка мыши по точке останова → Conditions...):

При следующем пробеге, однако, точку останова придётся отредактировать или убрать, так как ID потока может поменяться.

Не забывайте, однако, что многопоточная отладка не так проста! Если у вас в коде race condition, то наличие отладчика и точки останова может повлиять на порядок исполнения кода в различных потоках, так что с хорошими шансами ошибка может и не проявиться с пошаговым выполнением и точками останова отладкой. Для того, чтобы бороться с этим, вам придётся добавить логирование (которое влияет на порядок выполнения намного меньше, чем остановка в отладчике). Если и логирование не позволяет локализовать проблему, то приходится использовать метод пристального взгляда, просто анализируя код в уме.
Отладка многопоточного пода — одна из самых сложных вещей в программировании.

Комментариев нет:

Отправить комментарий