2009-10-10 3 views
5

Когда я работаю над multithreads, как я могу отлаживать, чтобы узнать, какой поток вызывает ненормальное поведение?Отладка C# Threads

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

ответ

1

В качестве альтернативы отладке вы можете провести тестирование, связанное с потоком. Книга The Art of Unit Testing имеет раздел по этому вопросу в Приложении Б. автор упоминает три инструмента (два из которых он имеет личный интерес):

1

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

1

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

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

Для тяжелых вещей вы можете использовать WinDbg + SOS. читайте о потоках!,! threadpool и! runaway.

+0

, как правило, было бы удобнее использовать эти команды через панель промежуточного уровня в VS (нет необходимости запускать WinDbg как отдельный процесс.) – 2009-10-10 17:01:50

+0

@opc: вы правы, пока вам не нужны другие команды WinDbg. что не всегда так. –

1

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

Если приложение по-прежнему ошибочно работает, вы знаете, что это взаимодействие между различными типами потоков, которые вызывают проблему. Если это не так, то может быть, что есть какой-то ресурс, который вы не зациклировали правильно (например).

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

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

+0

Действительно хорошее предложение г-н Крис. – user186973

1

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