Страницы

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

пятница, 29 ноября 2019 г.

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

#c_sharp #многопоточность


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


Ответы

Ответ 1



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

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

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