2011-06-20 9 views
29

Chciałbym uruchomić mój zestaw testów w debugerze i złamać każdy nieoczekiwany wyjątek, ale programy ładujące klasy Java rzucają wiele ClassNotFoundExceptions podczas normalnej pracy.IntelliJ IDEA: Jak utworzyć punkt zatrzymania wyjątku, który zatrzymuje się we wszystkich wyjątkach * z wyjątkiem wyjątku * ClassNotFoundException?

Byłoby miło, gdybym mógł utworzyć punkt przerwania wyjątków, który ignoruje ClassNotFoundExceptions i zatrzymuje się na wszystkim innym.

+1

Co chcesz osiągnąć najlepiej osiągnąć poprzez dodanie filtru klasy formularza 'com.mypackage. *' Na 'Dowolny Exception' –

Odpowiedz

44

Ta odpowiedź jest prawie taka sama jak z Mindas, ale szczegóły wystarczyły, abym zignorował jego sugestię za pierwszym razem i przeszkadzałam chłopcom/dziewczętom z Intelliim (dzięki Serge i Eugene) :

  • Otwórz okno „punkty przerwania” i przejść do karty „punkty przerwania wyjątku”
  • Highlight i aktywowac żadnego wyjątku "breakpoint
  • Aktywuj tylko stan i typ„warunek”w następujący :

    !(this instanceof java.lang.ClassNotFoundException) 
    

IDEA usunie '' java.lang natychmiast (wersja 11.01), ale to jest wymagane dla tego rozwiązania do pracy. Jeśli tego nie zrobisz, otrzymasz wyskakujące okno ClassNotFound (ironia, ironia).

Dowiedziałem się, że wiele "standardowych" bibliotek wyrzuca wyjątki w ich normalnym przepływie operacji. Po pomyślnym zignorowaniu wyjątków ClassNotFoundException okaże się, że inni nagle się pojawiają. Nic nie jest nigdy łatwe.

+1

"To" jest kluczem, widocznie! Podczas testowania tego IDEA nie usunęła bitu "java.lang", ale wstawiła czerwone zawijasy pod wyrazem i ostrzegła mnie, że 'ten' nie może zostać przekonwertowany na ClassNotFoundException. Po prostu to zignorowałem i wszystko działało idealnie. –

+0

Prawdopodobnie został poprawiony w IntelliJ 12, ale od wersji IntelliJ 13/Android Studio działa to doskonale! Naprawdę cieszę się, że znalazłem tę wskazówkę. –

2
  • prawym przyciskiem myszy na punkt przerwania, a następnie kliknąć na Properties
  • iść do Conditions okienku
  • zaznaczyć pole wyboru przy Condition
  • typu !(myException instanceof ClassNotFoundException)
+0

To przerwania wyjątku, więc nie mogę na nim prawym przyciskiem myszy. .. –

+1

Mimo to spróbowałem twojej sugestii, mając nadzieję, że istnieje niejawna zmienna o nazwie 'myException', która może być użyta w warunkach wyjątku, ale nie działa. –

+0

Nie możesz sprawić, by był to punkt przerwania linii? 'myException' nie miało być interpretowane dosłownie, ale jako wyjątek można złapać. W każdym razie możesz zdefiniować filtr klasy z wyjątkami Breakpoints, które powinny zrobić coś podobnego. – mindas

4

Z jakiegoś powodu ciągle otrzymywałem "nie udało mi się ocenić wyrażenia punktu przerwania", gdy ustawiłem warunek! ClassNotFoundException zgodnie z regułami punktu przerwania "wyjątek". Udało mi się to obejść, tworząc niestandardowy punkt przerwania typu "dowolny wyjątek":

  1. Otwórz okno punktów przerwania w widoku debugowania.
  2. Odznacz "Dowolny wyjątek", abyśmy nie zatrzymywali się z żadnym wyjątkiem, używając elementu domyślnego.
  3. Kliknij znak +, kliknij punkt przerwania wyjątków Java, zaznacz pole "Uwzględnij klasy nieprodukcyjne", wpisz "java.lang.Exception" w polu, wybierz wynik, który pojawia się w polu.
  4. Wybierz element Wyjątek, który jest generowany na liście (w sekcji „żadnego wyjątku”) i umieścić

    !(this instanceof java.lang.ClassNotFoundException) 
    

    w polu stan.

Powiązane problemy