2012-05-09 40 views
7

Niedawno przeniesieni do Heliosa i teraz za każdym razem, gdy krok do konstruktora dla klasy (np Cat myCat = new Cat();), zaćmienie debugger pokazuje stos jakoKiedy wchodząc do klasy instancji, zaćmienie debugger przechodzi do kodu natywnego

java stack trace entering instantiation:

Aby uzyskać rzeczywisty kod konstruktora, muszę kilka razy wyjść, co jest denerwujące. Dzieje się tak z każdą klasą i pomimo stosu nigdy nie widzę komunikatów o błędach w konsoli. Jak mogę to naprawić, aby przejść bezpośrednio do konstruktora dla mojej klasy?

Dzieje się tak tylko przy pierwszym użyciu klasy, a nawet dla klas, które znajdują się w tym samym pliku src co bieżący.

+0

czy klasa istnieje? wygląda na to, że wyrzucany jest wyjątek ClassNotFoundException ... – pstanton

+1

Klasa zdecydowanie istnieje, debugger ostatecznie wchodzi do konstruktora, a program z powodzeniem działa. – cplusplus

Odpowiedz

13

Eclipse ma pierwszeństwo filtra krok w preferencjach debuger Java. Jego domyślna preferencja powoduje odfiltrowanie java.lang.ClassLoader, ale to nie zadziałało. Może to mieć coś wspólnego z niedawno zainstalowanym i przełączonym na użycie jre7. Aby rozwiązać mój problem, dodałem filtr, aby przejrzeć dowolny kod w pakiecie java.lang.

enter image description here

0

Ze ścieżki stosu zgłoszonej w środowisku Eclipse wygląda na to, że ClassNotFoundException został zainicjowany i jest zgłaszany. Czy napisana przez Ciebie aplikacja napotkała jakieś problemy?

Czy ustawiłeś punkty przerwania w konstruktorze klasy? w ogóle nie mogłeś wejść do konstruktora?

Czy używasz Class.forname() lub importujesz, aby wprowadzić klasę do środowiska JRE?

+0

Żadnych problemów i mogłem wejść do konstruktora. – cplusplus

+0

Nic specjalnego do zaimportowania klasy. – cplusplus

5

Wydaje mi się, że wyjątek ClassNotFoundException dzieje się po prostu w ramach ładowania klas - problemem jest to, że ustawiono punkt wstrzymania, który uruchamia się po wygenerowaniu wyjątków. Domyślam się, że twoja wersja Eclipse ma domyślnie ten punkt przełomowy, podczas gdy stary nie.

Zapoznaj się z this link, która zgłasza podobny problem i zapewnia rozwiązanie, które służy tylko do wyłączenia tego punktu przerwania.

(w interesie nauki do ryb i wszystkich, że Google Search termin był „eclipse debugger wyrzutni $ appclassloader”).

+0

Jest to rzeczywiście problem i występuje przy pierwszym wywołaniu metody na klasie, która nie została jeszcze załadowana. Po prostu naciśnij F7 (powrót) tyle razy, ile potrzeba, aby powrócić do swojej klasy - uważam, że zwykle wymaga 8 naciśnięć F7, aby wrócić do mojej klasy. –

+0

Btw, Zastanawiam się, czy można również obejść ten problem, ładując klasę przed krokiem do konstruktora. Na przykład, co jeśli oceniasz w swoim debugerze 'Class.forName (Cat.class.getName())'? – yshavit

+0

Wszystko, co zostanie załadowane na tę klasę, obejmie ten problem. –

Powiązane problemy