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