Какую информацию Вы получаете, когда Ваше программное обеспечение отказывает в поле? [закрытый]

8
задан 8 revs, 3 users 60% 23 May 2017 в 12:07
поделиться

6 ответов

(Это в некоторой степени специфично для Windows / .NET, но именно это вы указали в вопросе, и я думаю, что это весьма полезная информация в этом контексте. )

Если ваше приложение не является строго однопоточным, вам нужен файл дампа (который даст вам как минимум стек для всех потоков), а не только трассировку стека для потока, генерирующего исключение.

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

Clrdump - это в основном оболочка для Microsoft DbgHelp.dll. Вы можете использовать DbgHelp напрямую - см. этот вопрос - но тогда вы получите «полный минидамп» размером с виртуальное адресное пространство вашего приложения, которое может быть довольно большим. Clrdump отлично справляется с созданием небольшого дампа, содержащего только трассировки стека, плюс достаточно информации, чтобы SOS могла их прочитать.

0
ответ дан 6 December 2019 в 02:24
поделиться

Вы не упоминаете о ведении журнала процессов (например, syslog в Linux, Event Viewer для Windows?). Поскольку у меня также есть опыт системного администратора, я действительно ценю программы с возможностью ведения журнала. Еще лучше, если можно будет выбрать уровень детализации.

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

Если ваши пользователи более технические, вы можете попросить их установить максимальную степень детализации журнала и воспроизвести ошибку еще раз.

0
ответ дан 6 December 2019 в 02:24
поделиться

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

Те, которые вы упомянули, в порядке, но есть еще кое-что, что хорошо для регистрации:

  • входные параметры для критических и сложных операций
  • контекст вашей программы - некоторые объекты с тяжелыми алгоритмами - наибольший риск - обладание классами
  • состояние, в котором находится ваша программа

пример: поток вашей программы подобен автомату состояний, и у вас есть 5 состояний, и вы достигли состояния 3.

  • если у вас есть приложение, которое является сервером -client, собирать оба журнала - со стороны поставщика и потребителя.

  • дамп памяти обычно не является хорошим предложением - делайте это только тогда, когда вам нужно понять проблемы в фреймворках или JVM (например), которые вы не можете контролировать. OutOfMemoryError например

0
ответ дан 6 December 2019 в 02:24
поделиться

Я не вижу в вашем списке наиболее важной информации (когда мы говорим об уровне кода dotnet / java).
Тип исключения, сообщение и трассировка.
Вы можете использовать простой код, чтобы перехватить любое исключение, и «записать в журнал» / «отправить прямо на электронную почту».

0
ответ дан 6 December 2019 в 02:24
поделиться

LA Transtar также ведет ключевой журнал, который сохраняется только на случай сбоев. Этот журнал содержит ввод и отслеживание работы программы. Журнал сбрасывается в начале каждой новой транзакции.

0
ответ дан 6 December 2019 в 02:24
поделиться

А теперь из лагеря паранойи :(

Подумайте, на какую отрасль нацелено программное обеспечение. Сбор любой информации о пользователе (даже имя Active Directory) или сети может привести к тому, что ваше приложение будет зачернено и потенциально повлечет за собой ответственность. т.е. что делать, если ваша база данных ошибок скомпрометирована и эта информация используется для взлома сети банка или государственных лабораторий. Будет ли замечен отчет об ошибке, содержащий их IP-адреса?Можно ли подать в суд? Может быть...

Например, если вам нужно собрать сетевые данные для диагностики сетевых проблем, подумайте о том, чтобы ваше приложение заменило любые системные имена или IP-адреса заполнителями, прежде чем данные будут отправлены вам обратно. (emailSrvr1, bankAcctNumSrv, становится srvr1 и srvr2) Это большая боль в отслеживании проблем, но, возможно, это того стоит. Это по-прежнему фиксирует информацию, которая может привести вас к неприятностям, но может помочь.

Я работаю с высококлассными предприятиями и правительством в течение нескольких лет, что окрашивает мою перспективу, но, вероятно, стоит подумать о том, что вы собираете и как это хранится.

1
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: