2010-05-14 4 views
2

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

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

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

ответ

3

Посмотрите на: UnhandledException и ThreadException.

Вы можете внести ошибки в файл или использовать Windows logging facilities.

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

+0

Рекомендованная практика? –

+0

Я отредактировал его, я думаю, что это рекомендуемая практика. –

+0

Спасибо за ссылки, они выглядят интересными ... (в первой есть опечатка) –

0

Смотрите эту ссылку:

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)); 
} 
0

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

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()); 
} 

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

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

1

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

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

1

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

Смежные вопросы