2010-02-05 1 views
7

В .NET сигнатуры методов не говорят мне, если я пропустил обработку некоторых исключений, которые могут быть переданы моим кодом. Есть ли какой-нибудь инструмент, который может предупредить меня, если я говорю об удалении HashTable, но не обработал ArgumentNullException? Я не хочу удивляться во время работы.Как я могу узнать, не обработал ли я какие-то непроверенные исключения, которые мог бы выполнить мой код .NET?

И это означает, что вам нужно знать свой код очень хорошо, иначе исключить исключения можно с трудом?

ответ

4

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

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

1

Не существует языковой поддержки того, что вы пытаетесь выполнить. Мы написали таможенное дополнение к VS, чтобы убедиться, что все точки входа для нашего API попытались поймать для регистрации. Однако я никогда не видел значения на языках, которые заставляли вас покрывать все возможные объявленные случаи исключения, поскольку вам все равно придется писать код, чтобы сделать что-то значимое с ошибкой. Большинство людей просто смотрят на то, что complier жалуется на запись обработчика и скрывает, что может быть полезной ошибкой в ​​некотором бесполезном коде. В некоторых случаях его лучше терпеть неудачу и знать, что есть проблема.

+0

Я согласен, что это плохая вещь, чтобы просто поймать исключений и не правильно его использовать, чтобы принять решение о том, как вы программа должна реагировать на это плохо. Как в VB6 просто сказать «On Error Resume Next». – awe

1

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

Также старайтесь не ловить исключения, но устранить причину. (Т.е. не поймать ArgumentNullException, но не проходя null

2

для окон приложений:

AppDomain currentDomain = default(AppDomain); 
currentDomain = AppDomain.CurrentDomain; 
// Handler for unhandled exceptions. 
currentDomain.UnhandledException += UnhandledExceptionHandler; 
// Handler for exceptions in threads behind forms. 
Application.ThreadException += ThreadExceptionHandler; 

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
} 

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e) 
{ 
} 
+0

@Aseem: Не уверен, что я понимаю это. Итак, все необработанные и связанные с потоком исключения придут сюда, если я их не обработаю, и он обеспечивает некоторую безопасность .. это ваше намерение здесь? –

+0

Yea ... Затем вы можете решить, что делать с этими исключениями. –

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

  • Нет связанных вопросов^_^