Жрец 28 октября 2010 в 15:16

Введение в отчеты об ошибках

  • Чулан *

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

Сколько раз Вы писали своим пользователям: «сделайте пожалуйста скриншот сообщения об ошибке и пришлите его мне»? И ведь периодически оказывается, что ошибка возникает очень редко и вызвать ее повторное появление пользователь не в силах. Автоматическая отправка отчетов об ошибках – великолепное решение этой проблемы.

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

Как это работает

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

Как правило, для передачи отчета используется протокол HTTP (возникает меньше проблем с межсетевыми экранами), а из отправляемых сведений наибольшую ценность представляют сведения о типе ошибки, состоянии стека вызовов, дате и времени возникновения, версии программы, значениях некоторых переменных, объеме свободной памяти, версии операционной системы и используемых библиотек, иногда подробные сведения об аппаратном обеспечении.

Пример реализации на C#

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

Для начала – серверная сторона.
Интерфейс веб-сервиса


{
public interface IErrorReporting
{
string PostErrorInfo(string info);
}
}

Реализация этого интерфейса

Namespace ErrorReportingService
{
public class ErrorReporting: IErrorReporting
{
public string PostErrorInfo(string info)
{
System.IO.File.AppendAllText(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "\\App_Data\\reports.txt",
"\n\n"+info);
return "ok";
}
}
}

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

Static class Program
{
public static void SendDataAndShowMessage(System.Exception ex)
{
string text = DateTime.Now.ToShortDateString()+" "+
DateTime.Now.ToLongTimeString()+"\n"+
ex.ToString();// тут хорошо бы его отформатировать, скажем, в XML, добавить данные о времени, дате, железе и софте...
try
{
(new ErrorReportingService.ErrorReportingClient()).PostErrorInfo(text);
MessageBox.Show("Произошла ошибка. Информация об ошибке отправлена разработчику.\n\n" + text, "Ошибка программы", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (System.Exception ex2)
{
MessageBox.Show("Произошла ошибка. Информацию об ошибке отправить разработчику не удалось.\n\n" + text, "Ошибка программы", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static void AppDomain_CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
SendDataAndShowMessage((Exception)e.ExceptionObject);
Application.Exit();
}
public static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
SendDataAndShowMessage(e.Exception);
//на этом месте можно предложить "попытать продолжить работу" (ну-ну) или закрыть приложение
Application.Exit();
}
static void Main()
{
//Установка обработчика
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(Program.AppDomain_CurrentDomain_UnhandledException);
Application.ThreadException +=
new System.Threading.ThreadExceptionEventHandler(Program.Application_ThreadException);

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

Вот и весь код.

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

Морально-этическая сторона вопроса

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

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

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

Теги: программирование, ошибки, исключения, отладка, тестирование, c#

30.09.2009 17:12

Если вы не хотите, чтобы информация об ошибках операционной системы и установленных программ сохранялась на компьютере и отправлялась в Microsoft, то вы можете настроить параметры сохранения и отправки отчетов об ошибках Windows 7.

Параметры отправки отчетов об ошибках и поиска решений проблем можно настроить двумя способами:

Важно : после изменения настроек отчетов об ошибках вы не сможете получать информацию о решении проблем в Центре поддержки Windows 7. Изменяйте эти настройки только если вы точно знаете, зачем вам это нужно.

Настройка отчетов об ошибках с помощью Центра поддержки Windows 7

1. Откройте Панель управления > Центр поддержки .

2. Нажмите Обслуживание > Параметры .

3. Чтобы изменить параметры отправки отчетов об ошибках для своей учетной записи, выберите один из предложенных вариантов:

  • Автоматически проверять наличие решений (рекомендуется) – каждый раз при возникновении ошибки Windows 7 будет формировать полный отчет о критическом событии. Затем, при наличии подключения к Интернету, этот отчет будет автоматически отправлен в Microsoft. Если решение этой проблемы доступно в базе Microsoft, то в Центре поддержки появится уведомление об этом;
  • Автоматически проверять на наличие новых решений и при необходимости отправлять дополнительные данные отчета – практически, эта настройка не отличается от предыдущей;
  • Каждый раз при возникновении проблемы отображать запрос до проверки на наличие решений – при возникновении ошибки Windows 7 будет формировать отчет о критическом событии. Затем на экран будет выведено диалоговое окно, предлагающее отправить отчет о проблеме в Microsoft. В случае вашего согласия и при наличии подключения к Интернету, отчет будет отправлен и если решение будет найдено, вы получите уведомление в Центре поддержки. Если же вы откажетесь отправлять отчет, то информация об ошибке будет сохранена на компьютере, но отправлена в Microsoft не будет, а вам придется искать решение проблемы самостоятельно;
  • Не проверять на наличие новых решений (не рекомендуется) – при возникновении ошибки Windows 7 будет формировать отчет о критическом событии и сохранять его на компьютере. Никакой информации в Microsoft отправляться не будет.

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

Чтобы настроить отправку отчетов об ошибках для всех пользователей компьютера, войдите в Windows 7 как администратор, откройте Панель управления > Центр поддержки > Обслуживание > Параметры и нажмите Изменить параметры отчетов для всех пользователей .

Настройка отчетов об ошибках с помощью Редактора локальной групповой политики

Поскольку редактор локальной групповой политики присутствует не во всех , данный способ может быть применен только в Windows 7 Профессиональная, Windows 7 Максимальная и Windows 7 Корпоративная.

Важно : настройки, заданные в Редакторе локальной групповой политики, имеют более высокий приоритет, чем настройки, заданные в Центре поддержки.

1. Войдите в Windows 7 с правами администратора.

2. Откройте меню Пуск, введите в поисковую строку и нажмите Ввод .

3. В левом меню Редактора локальной групповой политики откройте: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Отчеты об ошибках Windows .

4. Выполните одно или несколько действий:

Чтобы запретить отправку в Microsoft дополнительных данных об ошибках, дважды щелкните пункт Не отправлять дополнительные данные , выберите Включить и нажмите ОК . Если данный параметр включен, любые запросы корпорации Microsoft на дополнительные данные в ответ на события в отчетах об ошибках Windows будут автоматически отклоняться без уведомления пользователя.

Чтобы отключить отправку отчетов об ошибках, дважды щелкните пункт Отключить отчеты об ошибках Windows , выберите Включить и нажмите ОК . Если этот параметр включен, то в случае обнаружения ошибок, Windows 7 не будет отправлять информацию о них в Microsoft. Однако и вы не сможете получать информацию о решениях проблем через Центр поддержки.

Чтобы отключить сохранение отчетов об ошибках, дважды щелкните пункт Отключить запись в журнал , выберите Включить и нажмите ОК . Если данный параметр включен, события отчетов об ошибках Windows не будут фиксироваться в системном журнале событий.

Мониторинг и диагностика


Обновлено — 2017-01-25

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

В Windows XP и Windows 7 отключение оповещения об ошибках делается по разному. Но суть от этого не меняется.

В Windows XP это делается довольно таки просто

  • Щелкните правой кнопкой мышки по значку Мой компьютер , и выберите в выпадающем меню пункт Свойства .
  • Или откройте окно Свойства системы через Панель управления (Пуск – Настройка – панель управления – Система );

  • В открывшемся окне Свойства системы перейдите на вкладку Дополнительно и в самом низу нажмите кнопку Отчет об ошибках ;

  • Во вновь открывшемся окошке установите переключатель на Отключить отчет об ошибках и сохраните настройки кнопкой ОК .

В Windows 7 отключить оповещение об ошибках можно таким образом:

В Windows 7 с не привычки можно долго искать, где что включается или отключается. Самый быстрый и легкий способ найти то что нужно — это зайти в Панель управления и наверху справа в маленьком окошке поиска набрать слово или фразу того, что вы ищете.

Вот, на примере отключения оповещения об ошибках и посмотрите как это делается.

  • Откройте Пуск — Панель управления . Наберите в поиске панели управления «Центр поддержки». Перейдите по ссылке Центр поддержки.

  • В новом окне щелкните Обслуживание , а затем в группе Поиск решений для указанных в отчетах проблем щелкните Параметры .

  • Выберите Не проверять на наличие новых решений (не рекомендуется) и нажмите кнопку ОК .

Вот мы и отключили оповещение об ошибках.

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

Меня последнее время просто достали надоедливые , а у дочки компьютер постоянно вылетает на игре или при просмотре видео в самом интересном месте.

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

Мой вам совет — изучайте свой компьютер, и любая неисправность станет для вас просто временным неудобством, которое вы сами же и устраните.

Введение

В программировании отчёт об ошибке (англ. error report или crash report) - это файл, содержащий техническую информацию об исключительной ситуации (исключении), произошедшем в программе на компьютере пользователя. В терминологии программирования критическая ошибка, которая приводит к аварийному завершению программы, также называется крэшем (англ. crash).

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

Создание отчета об ошибке

Отчет об ошибке обычно создается специальной программой (англ. crash reporter). Целью такой программы является сбор данных о произошедшем креше и отправка этих данных по сети Интернет некой третьей стороне, обычно этой третьей стороной является производитель программного обеспечения. Отчет об ошибке призван помочь разработчикам программного обеспечения выяснить причину креша и исправить ее в последующих релизах программного продукта.

Mac OS X

В Mac OS X cуществует стандартная программа - сборщик отчетов об ошибке: /System/Library/CoreServices/Crash Reporter.app. Crash Reporter.app отправляет креш-логи, стандартные для ОС Unix, в компанию Apple Computer, где эти логи анализируют их инженеры. В верхнем поле окна отчета об ошибке содержится креш лог, а в нижнем пользователь может ввести свои комментарии, например, рассказать что он делал в момент, когда произошел креш. Пользователи также могут скопировать лог и отправить его разработчику ПО для анализа. Crash Reporter.app работает в трех основных режимах в случае ошибки: ничего не делать, вывести сообщение "Application has crashed" или вывести окно отчета об ошибке.

Windows

GNOME

На платформе GNOME для сбора и отправки отчетов об ошибке используется утилита Bug Buddy. Когда приложение, использующее библиотеки GNOME аварийно завершается, Bug Buddy генерирует снимок стека, используя отладчик gdb и предлагает пользователю отправить отчет в систему GNOME bugzilla. Пользователь может добавить свой комментарий и посмотреть, что содержится в отчете.

KDE

Утилита для отправки отчетов об ошибках в KDE называется Dr. Konqi.

Mozilla

Talkback

(также известный как Quality Feedback Agent ) являлся утилитой для отправки сообщений об ошибках в программном обеспечении Mozilla вплоть до версии 1.8.1 для отправки отчетов об ошибках на централизованный сервер. Talkback является проприетарным ПО, на которое Mozilla Corporation получила лицензию у компании SupportSoft. Когда продукты Mozilla (например Mozilla Firefox , Mozilla Thunderbird) аварийно завершали свою работу, агент Talkback предлагал пользователю ввести описание ошибки. Talkback не заменет собой встроенной в операционную систему программы для отправки отчетов об ошибке, которая, запускается наряду с агентом Talkback. Talkback был заменен на программу Breakpad в браузере Firefox начиная с версии 3.

Breakpad

Ubuntu

Вместе с релизом Ubuntu 6.10, Ubuntu включает утилиту Apport .

Apport перехватывает процессы, в которых произошло исключение и которые готовы создать дамп ядра (core dump), и записывает отчеты об ошибках в определенное место. Затем специальный демон, предлагает пользователю отправить отчеты в Ubuntu для их анализа.

World of Warcraft

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