Отображение и захват исключений c # - PullRequest
2 голосов
/ 14 мая 2010

У меня есть программа ac #, которая выбрасывает NullReferenceException().Когда я запускаю это на моей машине с Vista, появляется знакомый экран «Foo прекратил работать».Я могу легко нажать на «детали», чтобы увидеть, что пошло не так.На одной машине с XP нет никаких предупреждений: программа просто закрывается, а на другой XP я получаю сообщение «Foo столкнулся с проблемой ...».Есть ли способ, которым я могу изменить эту настройку (XP)?

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

edit: я хочу это для всего моего проекта, а не только для критической секции.Я не думаю, что это рекомендуемая практика, чтобы обернуть всю программу в большой try...catch, или это?

Ответы [ 5 ]

3 голосов
/ 14 мая 2010

Взгляните на: UnhandledException и ThreadException .

Вы можете регистрировать ошибки в файле или использовать Средства ведения журнала Windows .

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

1 голос
/ 20 мая 2010

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

1 голос
/ 14 мая 2010

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

Либо в делегате DispatcherUnhandledException, либо в разделе catch блока try-catch вы можете затем вызвать функцию, которая записывает сообщение об ошибке в файл журнала.

0 голосов
/ 14 мая 2010

Вы можете свернуть свой код в

try
{
    // Your code
}
catch (Exception ex)
{
    streamWriter.WriteLine("your custom exception text, stack trace:" + ex.StackTrace.ToString());
    MessageBox.Show("Your custom exception text, Stack Trace:" + ex.StackTrace.ToString());
}

и обработайте обратную связь самостоятельно с помощью объекта записи потока, указывающего на выбранный вами файл журнала.

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

0 голосов
/ 14 мая 2010

См. Ссылку:

http://blogs.msdn.com/csharpfaq/archive/2006/03/27/562555.aspx

Это поможет вам начать работу.

Использование:

try
{
    // Your code here
}
catch (Exception ex)
{
    // This will tell you the Exception
    Console.WriteLine("Exception type: {0}", ex.GetType());
    // or, if you use the example from the link above
    LogMessageToFile(String.Format("Exception type: {0}", ex.GetType));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...