Отладка потоков C # - PullRequest
       8

Отладка потоков C #

5 голосов
/ 10 октября 2009

Когда я работаю с многопоточностью, как мне отладить, чтобы узнать, какой поток вызывает ненормальное поведение?

Могу ли я использовать permonitor для отладки, или есть какие-либо другие инструменты или средства отладки, которые доступны?

Ответы [ 6 ]

2 голосов
/ 10 октября 2009
1 голос
/ 10 октября 2009

В качестве альтернативы отладке вы можете провести тестирование, связанное с потоками. Книга Искусство юнит-тестирования содержит раздел об этом в Приложении B. Автор упоминает три инструмента (два из которых он лично заинтересовал):

1 голос
/ 10 октября 2009

Как вы определяете ненормальное поведение? Будет ли это исключение? Не уверен, поможет ли это вам, но я часто называю объект потока при его создании, а затем, если я улавливаю исключение или если существуют определенные критерии, я пишу в журнал событий. Я включаю время, имя приложения, название потока и информацию об исключении. Я не просто использую его для отладки, я использую его, если пользователь жалуется на странное поведение или сообщает об ошибке. Тогда я могу вернуться и получить информацию об этом.

1 голос
/ 10 октября 2009

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

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

То, что я пытаюсь сказать, это упростить ваше приложение до такой степени, что оно использует минимальное количество потоков, чтобы все еще оставаться вашим оригинальным дизайном.

* Не лучшее слово для использования, но, например, если вы породили 10 потоков, чтобы иметь дело с файловым вводом-выводом только 1.

1 голос
/ 10 октября 2009

Зависит от того, что вы подразумеваете под «ненормальным поведением» ...

для большей части времени визуального студийного отладчика должно быть достаточно. окна Threads и CallStack предоставят вам много информации о происходящем.

для тяжелых условий работы вы можете использовать WinDbg + SOS. прочитайте о командах! threads,! threadpool и! runaway.

1 голос
/ 10 октября 2009

Вы можете использовать Visual Studio для установки точек останова на определенных потоках. См. здесь и здесь , чтобы узнать, как это сделать.

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