.NET "Отправить сообщение об ошибке [мне]" - PullRequest
6 голосов
/ 26 июля 2009

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

Существует ли для этого библиотека / проект .NET? цель? Или, альтернативно, это звучит как правильный подход, просто перехватывая все исключения в точке входа приложения?

Ответы [ 7 ]

4 голосов
/ 26 июля 2009

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

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

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

2 голосов
/ 26 июля 2009

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

1 голос
/ 08 декабря 2014

Я работаю над проектом с открытым исходным кодом Exceptionless, который имеет клиентские библиотеки, которые делают это! Мы фиксируем все необработанные исключения и отправляем их в остальные API, а затем обрабатываем их в режиме реального времени.

https://github.com/exceptionless/Exceptionless

1 голос
/ 26 июля 2009

Я изменил Джефф Удобный для пользователя обработчик исключений и обновил его для .NET 2.0 / 3.5, и мне очень повезло с этим. Если из-за исключительной ситуации весь стек не обрабатывается, снимается снимок экрана и отправляется по электронной почте вместе с подробной трассировкой стека команде разработчиков.

1 голос
/ 26 июля 2009

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

Используя продукт (Runtime Intelligence), написанный компанией, в которой я работаю (PreEmptive Soltutions), вы можете внедрить не только сообщения об ошибках, но и возможностьчтобы отслеживать, когда пользователи используют ваши приложения и какие функции они используют с минимальным кодированием.

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

Базовая версия этой функции должна быть включена в Visual Studio 2010, а также получить доступ к бесплатным данным. портал отчетности (но без SLA, гарантий хранения данных или конфиденциальности данных).

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

Сообщение об ошибке можно выполнить с помощью приведенного ниже примера кода:

public partial class app : Application {
// field to temporarily store exception data        
    private Exception exp;
    void AppStartup(object sender, StartupEventArgs args) {
        // add a handler to catch any unhandled exceptions    
        this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(ErrorHandler); 
        Window1 mainWindow = new Window1();
        mainWindow.ShowDialog();
    }

    // this will prompt the user if they want to report the exception
    void ErrorHandler(object sender, DispatcherUnhandledExceptionEventArgs e) {
        this.exp = e.Exception;
        if (MessageBox.Show("A " + exp.Message + " exception happened, should I report it?", "Error Occurrend", MessageBoxButton.YesNo) == MessageBoxResult.Yes) {
            ErrorHappened();
            e.Handled = true;
        }
    }

    // this method is called by the above ErrorHandler method and when run through Dotfuscator additional code will be injected into this method that will send a usage data message back to the server and the data in the dictionary (which will be exception data) returned by the ErrorData method will be included into the message and be stored and reported on the server
    [Feature("Exception", EventType = FeatureEventTypes.Tick, ExtendedKeySourceElement = SourceElements.Method, ExtendedKeySourceName = "ErrorData")]
    private void ErrorHappened() {
        // This is here as a placeholder for the exception feature attribute which will exit the application when executed
        AppShutdown(true);
    }

    // this method takes the exception data from the exp field and returns it as a dictionary of name/value pairs
    public Dictionary<string, string> ErrorData() {
        var retval = new Dictionary<string,string>();
        if (null != exp) {
            retval.Add("Error Message",exp.Message);
            retval.Add("Stack Trace",exp.StackTrace);
        }
        return retval;
    }
}
1 голос
/ 26 июля 2009

Используйте те же инструменты, что и Windows: Отчеты об ошибках Windows (WER). Он будет выполнять анализ сбоев и разбивать ваши сбои, чтобы вы могли понять, какие из них наиболее распространены. Никаких изменений кода не требуется, это работает на уровне процесса. Он будет регистрировать сбои из исключений, которые вы не можете перехватить.

Все, конечно, если вы работаете в Windows.

0 голосов
/ 01 октября 2009

Если вы работаете с приложением ASP.NET, вы также можете использовать функции мониторинга состояния ASP.NET. Включает добавление нескольких строк в файл конфигурации, и все готово. http://msdn.microsoft.com/en-us/library/bb398933.aspx

...