2010-02-05 10 views
7

W metodzie .NET sygnatury metod nie informują mnie, jeśli pominięto obsługę wyjątków, które mogą być zgłaszane przez mój kod. Czy jest jakieś narzędzie, które może ostrzec mnie, jeśli mówię, że używam tablicy HashTable, ale nie obsłużyłem ArgumentNullException? Nie chcę być zaskoczony biegiem.Skąd mam wiedzieć, jeśli nie obsłużono niektórych niezaznaczonych wyjątków, które może wyrzucić mój kod .NET?

A czy to oznacza, że ​​trzeba znać swój kod bardzo dobrze, w przeciwnym razie trudniej będzie usunąć niezaznaczone wyjątki?

Odpowiedz

4

Faktycznie, obsługa nieoczekiwanych wyjątków przez zakończenie programu jest najlepszym sposobem radzenia sobie z tą sytuacją, ponieważ ogólnie stan programu jest niezdefiniowany, gdy wydarzy się coś nieoczekiwanego. Jeśli logujesz wszystkie wyjątki i masz przyzwoity zestaw testów akceptacyjnych, możesz wyeliminować problemy wynikające z nieoczekiwanych wyjątków związanych z przepływem programu.

Defensywne programowanie poprzez sprawdzanie danych wejściowych metod, testy jednostkowe zajęć i zrozumienie struktury sprawi, że większość wyjątków będzie oczekiwana.

1

Brak obsługi języka dla tego, co próbujesz osiągnąć. Napisaliśmy dodatek celny do VS, aby upewnić się, że wszystkie punkty wejścia dla naszego interfejsu API próbowały złapać dane do logowania. Jednak nigdy nie widziałem wartości w językach, które zmusiły cię do pokrycia wszystkich możliwych zadeklarowanych przypadków wyjątków, ponieważ nadal musisz napisać jakiś kod, aby zrobić coś znaczącego z błędem. Większość ludzi po prostu patrzy na to, na co kompozytor narzeka, napisać przewodnik i ukryć, co może być użytecznym błędem w jakimś bezużytecznym kodzie. W niektórych przypadkach lepiej jest zawieść i wiedzieć, że jest problem.

+0

zgadzam się, że to zła rzecz po prostu złapać wyjątki i nie używać go właściwie podjąć decyzję o jak program powinien reagować na jest tak źle, jak w VB6, po prostu powiedz "On Error Resume Next." – awe

1

Powinieneś dodać obsługę wyjątków najwyższego poziomu do swojej aplikacji i napisać test jednostki, funkcjonalności i integracji swojej aplikacji, który przetestuje wszystkie możliwe przypadki użycia. Pomoże Ci to wyeliminować prawie wszystkie niezaznaczone wyjątki.

Staraj się również nie wychwytywać wyjątków, ale wyeliminuj przyczynę. (Czyli nie złapać ArgumentNullException ale nie przechodząc null

2

Dla aplikacji Windows:

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: Nie jestem pewien, że rozumiem to. Tak więc wszystkie nieobsługiwane i powiązane z wątkiem wyjątki pojawią się tutaj, na wypadek, gdy ich nie obsłużyłem, i zapewnia pewne bezpieczeństwo ... czy to twoja intencja tutaj? –

+0

Tak ... Możesz wtedy zdecydować, co zrobić z tymi wyjątkami. –

Powiązane problemy