Лучший ответ: не надо. Система для этого уже встроена прямо в операционную систему.
Если вы позволяете исключениям «всплывать» и выходить из программы, современные ОС включают в себя отчеты об ошибках Windows, которые дают пользователю возможность отправлять отчеты об ошибках в Microsoft. (Примечание: не отправляйте отчеты об ошибках автоматически - долго и усердно думайте о правовых последствиях, касающихся законов о конфиденциальности ...)
Отчет об ошибках включает в себя не только информацию об исключениях и трассировку полного стека, но также включает значительную часть памяти вашего процесса, а также точно , какие модули ОС были загружены (так что вы даже можете сказать, был ли на клиенте применен соответствующий патч Windows Update). Он упаковывает всю эту информацию в файл мини-дамп (а также включает несколько файлов XML с дополнительной информацией).
Этот отчет об ошибке загружается на серверы Microsoft, поэтому вам не нужно беспокоиться о настройке и обслуживании сервера «call home». Все отчеты об ошибках для ваших программ классифицируются с использованием расширенной эвристики в «корзины», причем каждая «корзина» содержит отчеты, которые могут быть вызваны одной и той же ошибкой.
Microsoft предоставляет всю эту информацию вам (как издателю программного обеспечения) через сайт под названием Winqual . Используя Winqual, вы можете просмотреть все отчеты об ошибках и использовать их эвристические алгоритмы сгруппирования, чтобы решить, какие ошибки наиболее влияют на ваших клиентов. Вы также можете скачать каждый отдельный отчет для более подробного изучения.
Если в вашей организации настроены сервер символов и сервер управления исходным кодом (и вам, безусловно, следует), то вы можете просто загрузить мини-дамп из загруженного отчета об ошибках прямо в Visual Studio, и он автоматически проверит старый источник выход из-под контроля исходного кода и позволяет вам проверить точное состояние программы в момент ее сбоя.
Поиск и исправление ошибок никогда не было таким простым.
Подводя итог, вот что вам нужно сделать:
- Установите сервер символов и исходный сервер в вашей организации. Установите политику выпуска, чтобы гарантировать, что все выпуски будут добавлены на сервер символов исходные индексированные pdbs , прежде чем они будут выпущены для клиента.
- Создание учетной записи в Winqual. Вам понадобится сертификат для подписи кода Authenticode; если вы получите сертификат для подписи кода, отличного от VeriSign, вам также придется потратить 100 долларов на «организационный сертификат» от VeriSign.
- Измените политику выпуска, включив в нее создание файлов сопоставления для ваших выпусков. Эти файлы сопоставления загружаются в Winqual перед отправкой релиза.
- Не не ловить неожиданные исключения. Если вам когда-нибудь понадобится их перехватить, обязательно перебросьте, используя
throw
, а не throw ex
, так что трассировка стека и исходное состояние программы сохраняются.
Для получения дополнительной информации я настоятельно рекомендую Отладка приложений .NET 2.0 от John Robbins. Несмотря на «2.0» в названии, эта книга до сих пор полностью актуальна (за исключением того, что единственным примером исходного сервера является использование Visual SourceSafe, что даже тогда было полной шуткой). Еще одна хорошая книга, если вам нужно много отладки, - это Advanced .NET Debugging , хотя она начинает показывать свой возраст, особенно с учетом того, что новые усовершенствования отладки VS2010 делают многие методы устаревшими.