Как увидеть исключение приложения при работе на клиентском компьютере? - PullRequest
2 голосов
/ 31 октября 2010

Я установил свое приложение Windows Forms .NET 3.5, и оно было установлено правильно.При попытке запустить приложение вылетает, и появляется типичное диалоговое окно ошибки Microsoft Windows.Вы знаете тот, который просит вас отправить отчет об ошибке.

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

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

Есть ли способ увидеть «внутреннее исключение», когда оно не запущено на компьютере разработчика?

Ответы [ 3 ]

2 голосов
/ 31 октября 2010

Помимо проверки средства просмотра событий Windows (из раздела «Управление компьютером»), вы также можете попытаться создать журнал ошибок в своей программе.Если вы расширите свой метод Main(), включив в него следующие строки, вы сможете получить дополнительную информацию о причине сбоя программы:

[STAThread]
static void Main()
{
    Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

    Application.Run(new Form1());
}

private static void Application_ThreadException(
        object sender, ThreadExceptionEventArgs e)
{
    //Log error here using e.Exception
}

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    //Log error here using (Exception)e.ExceptionObjecte.Exception
}

Например, вы можете записать ошибку в простой текстфайл с использованием StreamWriter :

string dateStr = DateTime.Now.ToString("yyyy-MM-dd");
StreamWriter sw = File.AppendText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ErrorLog_" + dateStr + ".log"));
sw.WriteLine(exception);
1 голос
/ 31 октября 2010

Это параметры по умолчанию, которые у вас есть:

  1. (если возможно) изменить приложение, чтобы оно регистрировало ошибки и предупреждения, используя, например, log4net или журнал событий Windows, а затем распространять ваше приложение.
  2. Если первый вариант невозможен, вам придется проверить более сложную отладку: отладку во время выполнения на клиентском компьютере.Одним из способов является использование WinDbg с расширениями .NET (SOS) или соответствующими инструментами из Средства отладки для Windows .Вы можете установить его на клиентском компьютере без запуска установщика, поэтому он не должен иметь побочных эффектов или вообще не иметь их (в отличие от отсутствия возможности настройки Visual Studio).Одна статья на эту тему здесь , где они отлаживают файл аварийного дампа. Здесь - еще одна статья на эту тему.Вы найдете бесконечные ресурсы по этому поиску в Google - тема не простая, но я рекомендую вам изучить ее.

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

0 голосов
/ 31 октября 2010

Вы проверяли EventLog? Если ваша программа запускается, а затем начинается сбой. поставить EventLog.WriteEntry (exceptionMessage). Если нет, лучший способ увидеть это - EventLog.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...