Eclipse - debugger nie zatrzymuje się w punkcie przerwania


97

Próbuję rozwalić JUnita. W kodzie źródłowym ustawiłem punkt przerwania w dwóch miejscach: 1) w wierszu, w którym inicjowany jest element statyczny, 2) w pierwszym wierszu jednego z przypadków testowych.

Debuger zatrzymuje się w wierszu inicjalizacji pola statycznego. Ale to nie koniec w przypadku testowym. Bez względu na to, gdzie ustawię punkt przerwania w przypadku testowym, debugger nie poprzestanie na tym. Wiem na pewno, że przypadek testowy jest wykonywany, ponieważ widzę, że dodane przeze mnie komunikaty dziennika pojawiają się w dzienniku.

Każda pomoc byłaby bardzo mile widziana.

Używam programu uruchamiającego Eclipse Galileo i JUnit4.


1
Czy Twój kod jest kompilowany z włączoną opcją -g w celu wygenerowania informacji debugowania w pliku .class? To oczywiście wymagane.
duffymo

Tak, jest kompilowany z opcją -g.
Roy,

Czy możesz również dodać informacje o używanej wersji JUnit i JRE? Uważam, że jest to pomocne w tym kontekście.
Vineet Reynolds

Swoją drogą, używany pakiet JDK jest ważniejszy (jest kilka zepsutych zestawów JDK, które mogą to powodować). Zignoruj ​​zapytanie dotyczące wersji JUnit.
Vineet Reynolds

Przepraszam, że powinienem to uwzględnić. JDK 1.6 aktualizacja 14.
Roy

Odpowiedzi:


39

Może to być związane z jednym z błędów w JDK 6 Update 14, jak wskazano w informacjach o wydaniu dla JDK 6 Update 15 .

Jeśli rzeczywiście okaże się, że jest to problem, należy przejść na wyższą wersję JDK (nie jest to jednak żadna gwarancja, ponieważ zostały wydane poprawki dla 6u16, 6u18 i 7b1 ). Najlepszym rozwiązaniem jest użycie flagi -XX: + UseParallelGC. Zwiększenie rozmiaru minimalnego i maksymalnego rozmiaru sterty, aby opóźnić pierwszy GC, przyniesie chwilową ulgę.

Nawiasem mówiąc, użyj tego raportu o błędzie w Eclipse, aby śledzić, jak radzą sobie inni.


1
Zaktualizowałem do wersji JDK 1.6 16. Teraz zatrzymuje się we wszystkich punktach przerwania, które ustawiłem. Bardzo dziękuję za Twoją pomoc.
Roy,

Nie ma za co. u16 wydaje się być wydaniem, w którym zostało to naprawione w dostatecznym stopniu, pomimo informacji o wydaniu u15.
Vineet Reynolds

Dzięki @Vineet - wyciągałem włosy z tego :-)
Jim Garrison,

@VineetReynolds: Widziałem Twoje cenne odpowiedzi dotyczące Jboss i Java ee 6. Czy możesz mi pomóc rozwiązać ten problem? stackoverflow.com/questions/28954323/…
burza mózgów

96

Naprawienie może być tak proste, jak kliknięcie przycisku Uruchom / pomiń wszystkie punkty przerwania. Pracował dla mnie.


3
zajęło mi trzy dni, zanim zauważyłem, że w jakiś sposób to kliknąłem
henry

1
Dzięki ...
musiałem

4
Dzięki ... nie mam pojęcia, kiedy się kliknęło
njfife

1
Dziękuję bardzo. W przypadku innych użytkowników w tej sytuacji, jeśli utworzysz punkt przerwania, zostanie on przekreślony.
saurabheights

To samo przytrafiło się mnie. Nigdy go nie kliknąłem ... !! Wersja: Mars Wydanie (4.5.0) Identyfikator kompilacji: 20150621-1200
Beezer

52

Upewnij się, że w obszarze Uruchom> Konfiguracje debugowania wybrano opcję „Zatrzymaj w głównym”, jeśli ma to zastosowanie w danej sytuacji.


1
Przed wysłaniem koniecznie przeczytaj poprzednie odpowiedzi. Problem polegał na ich wersji jvm ... i został rozwiązany trzy lata temu. Najlepiej nie przywracać starych wątków, chyba że Twoja odpowiedź wniesie coś ważnego, co nie zostało już uwzględnione w poprzednich odpowiedziach.
Leigh

6
Dzięki. @Answerer Twoja odpowiedź rozwiązała mój problem. Dziwne, że opcja „Stop in main” nie była ustawiona.
Yu Shen

25
Wygląda na to, że jego odpowiedź wniosła coś znaczącego, co nie zostało uwzględnione w poprzednich odpowiedziach :)
scubbo

Uwaga: jest to opcja dla aplikacji Java, ale nie dla aplikacji na Androida.
Noumenon

21

Zwykle, gdy mi się to zdarza (rzadko, ale tak jest) oznacza, że ​​wykonywany kod jest inny niż kod w edytorze. Od czasu do czasu Eclipse może się zdarzyć, że zbudowane klasy i kod w edytorze nie będą zsynchronizowane. Kiedy tak się dzieje, otrzymuję dziwne zachowanie debugera (debugowanie pustych linii, pomijanie linii kodów itp.).

Ponowne uruchomienie Eclipse, wyczyszczenie wszystkich projektów i odbudowanie wszystkiego zwykle rozwiązuje problem. Miałem też wtyczki do Mavena (starsze wersje ... od jakiegoś czasu ich nie miałem), które też to robią.

W przeciwnym razie może to być błąd, może ten, który stwierdził Vineet,

Mam nadzieję że to pomoże


Tak, to, co powiedziałeś, dzieje się częściej w IDE, które nie rekompilują automatycznie kodu. Oracle JDeveloper (z własnego doświadczenia) i w mniejszym stopniu (Netbeans) zostały uznane za niedostateczne.
Vineet Reynolds

1
Dobra rada. Za mało. Czasami przemyślamy problem i po prostu system nie jest zsynchronizowany. Tak jak w przypadku ponownego uruchamiania komputera w celu rozwiązywania prostych problemów.
Xonatron,

Dzięki, to był problem w moim przypadku. Brzmi głupio, ale proste czyszczenie i klawisz F5 po kompilacji wykonały zadanie.
jfajunior

20

Mogłeś przypadkowo pominąć wszystkie punkty przerwania na pasku narzędzi Eclipse. Aby to naprawić, przejdź do Eclipse -> Run -> Skip All Breakpoints.


1
Arggh, do tego też jest skrót, najprawdopodobniej nie sprawdziłem przypadkowo pozycji menu, ale raczej uderzyłem Ctrl + Alt + B. W każdym razie dzięki.
Patru

3

Projekt -> Clean wydawał się działać dla mnie w JRE 8


2

W celu debugowania pracy ze zdalnym, pliki java .class muszą być zgodne z informacjami debugującymi. Jeśli opcja „ -g: none ” została przekazana do kompilatora, plik klasy nie będzie zawierał niezbędnych informacji i dlatego debugger nie będzie w stanie dopasować punktów przerwania w kodzie źródłowym do tej klasy w trybie zdalnym. W międzyczasie, jeśli pliki jars / class zostały zaciemnione , wówczas również nie będą zawierały żadnych informacji debugowania. Zgodnie z Twoimi odpowiedziami najprawdopodobniej nie jest to Twój przypadek, ale te informacje mogą być przydatne dla innych osób, które mają ten sam problem.


2

W moim przypadku problem polegał na tym, że nie miałem otwartego widoku debugowania w perspektywie debugowania, więc:

1 - Upewnij się, że masz otwartą perspektywę debugowania:

Debugger eclipse nie działa 1

2 - Upewnij się, że masz otwarty widok debugowania:

debugger eclipse nie działa 2



1

W przypadku JDK7, uruchom-> Debug Configurations, zaznacz „Keep JUnit running after a test run when debugging”.


1

Zdarzyło mi się to raz, kiedy odznaczyłem opcję „Uruchom> Buduj automatycznie” i zapomniałem ponownie to sprawdzić.


1

Upewnij się, że deklarujesz pakiet u góry. W moim świetnym kodzie kończy się to na punktach przerwania:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

To nie kończy się na punktach przerwania:

import java.awt.event.ItemEvent;

isMule = false

class LineItem {
    // Structure defining individual DB rows
    public String ACCOUNT_CODE
    public String ACCOUNT_DESC
...

Po wielu zmaganiach rozwiązuje to mój problem. Dzięki +1
Federico Piazza

0

Aby usunąć punkty przerwania :

  1. Debuguj swoją klasę jako test junit
  2. Po zatrzymaniu debugera kliknij kartę „punkty przerwania” obok „zmiennych” i „wyrażeń”
  3. W prawym górnym rogu karty punktu przerwania kliknij przycisk z dwoma „X”
  4. Zatrzymaj test, zamień punkt przerwania i ponownie uruchom debuger

0

Sprawdź również, czy punkty przerwania w innych liniach DZIAŁAJĄ, może to być błąd w debugerze. Miałem problem z debugerem Eclipse polegający na tym, że umieszczenie punktu przerwania w przypisaniu logicznym, którego kod znajdował się w następnej linii, nie działało. Zgłosiłem to tutaj , ale umieszczenie go w poprzedniej lub następnej linii tak.


0

Jeśli nic nie działa

  1. Usuń tę zdalną / lokalną konfigurację debugowania i utwórz nową.
  2. Dodaj źródło w konfiguracjach debugowania.

0

Innym możliwym problemem jest to, że port debugera może być blokowany przez zaporę. Na przykład używałem mule anypoint studio (wersja 5.4.3). Domyślnym portem debuggera jest 6666. Przepływ jest wykonywany, ale nie zatrzyma się w punkcie przerwania. kiedy zmieniłem port na inny (np. 8099) to działało dobrze.


0

Przejdź do Right click->Debug Configurationi sprawdź, czy utworzono zbyt wiele instancji debugowania. Mój problem został rozwiązany, gdy usunąłem wiele wystąpień debugowania z konfiguracji i świeżo rozpoczęto debugowanie.


0

Jeśli korzystasz z Eclipse,

Kliknij prawym przyciskiem myszy folder projektu w obszarze „Eksplorator pakietów”.

Idź do źródła -> Oczyść i wybierz swój projekt.

Spowoduje to uporządkowanie bałaganu, a punkt przerwania powinien teraz działać.



0

W moim przypadku miałem wiele projektów w tym samym obszarze roboczym. Plik java, który próbowałem debugować, był obecny w więcej niż jednym projekcie z tym samym pakietem.

Nie potrzebowałem drugiego projektu, więc po prostu zamknąłem niepowiązane projekty (lub usuń plik z niepowiązanego projektu).


0

Dodatkowy komentarz dotyczący odpowiedzi Vineet Reynolds.

I okazało się, że muszę ustawić -XX:+UseParallelGCweclipse.ini

Konfiguruję argumenty maszyny wirtualnej (vm) w następujący sposób

-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms512m
-Xmx1024m
-XX:+UseParallelGC
-XX:PermSize=256M
-XX:MaxPermSize=512M

to rozwiązało problem.


-2

To działa dla mnie:

Musiałem umieścić mój adres lokalnego serwera w konfiguracji serwera PHP w następujący sposób:

wprowadź opis obrazu tutaj

Uwaga : ten adres jest tym, który konfiguruję w moim pliku .conf Apache .

Uwaga : jedynym działającym punktem przerwania był „Przerwa w pierwszym wierszu”, po czym punkty przerwania nie działały.

Uwaga : sprawdź właściwości xdebug w pliku php.ini i usuń wszystkie, które Twoim zdaniem nie są wymagane.


1
Nie widzę, jak to odpowiada na pytanie (dotyczące debugowania JUnit i Java)
Newtopian
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.