Eclipse - Der Debugger stoppt nicht am Haltepunkt


96

Ich versuche, eine JUnit zu erschießen. Im Quellcode habe ich den Haltepunkt an zwei Stellen festgelegt: 1) in einer Zeile, in der ein statisches Element initialisiert wird 2) in der ersten Zeile eines der Testfälle.

Der Debugger stoppt in der Initialisierungszeile des statischen Felds. Aber es hört im Testfall nicht auf. Egal wo ich den Haltepunkt im Testfall setze, der Debugger hört hier nicht auf. Ich weiß mit Sicherheit, dass der Testfall ausgeführt wird, da die von mir hinzugefügten Protokollnachrichten im Protokoll angezeigt werden.

Jede Hilfe wäre sehr dankbar.

Ich verwende Eclipse Galileo und JUnit4 Launcher.


1
Wird Ihr Code mit aktivierter Option -g kompiliert, um die Debug-Informationen in der .class-Datei zu generieren? Das ist natürlich erforderlich.
Duffymo

Ja, es wird mit der Option -g kompiliert.
Roy

Können Sie auch Informationen darüber hinzufügen, welche Version von JUnit und welche JRE Sie verwenden? Ich halte das in diesem Zusammenhang für hilfreich.
Vineet Reynolds

Das verwendete JDK ist übrigens wichtiger (es gibt einige durcheinandergebrachte JDKs, die dies verursachen könnten). Bitte ignorieren Sie die Abfrage zur Version von JUnit.
Vineet Reynolds

Entschuldigung, ich hätte das aufnehmen sollen. JDK 1.6 Update 14.
Roy

Antworten:


39

Dies könnte mit einem der Fehler in JDK 6 Update 14 zusammenhängen, wie in den Versionshinweisen für JDK 6 Update 15 angegeben .

Wenn sich herausstellt, dass dies tatsächlich das Problem ist, sollten Sie zu einer höheren Version des JDK wechseln (dies ist jedoch keine Garantie, da Korrekturen für 6u16, 6u18 und 7b1 veröffentlicht wurden ). Am besten verwenden Sie das Flag -XX: + UseParallelGC. Das Erhöhen der Größe der minimalen und maximalen Heap-Größe, um den ersten GC zu verzögern, bringt vorübergehende Erleichterung.

Verwenden Sie diesen Fehlerbericht übrigens in Eclipse, um zu verfolgen, wie es anderen ergangen ist.


1
Ich habe ein Upgrade auf JDK 1.6 Update 16 durchgeführt. Jetzt stoppt es an allen von mir festgelegten Haltepunkten. Vielen dank für Deine Hilfe.
Roy

Bitte. u16 scheint die Veröffentlichung zu sein, in der dies trotz der Versionshinweise von u15 in ausreichendem Maße behoben wurde.
Vineet Reynolds

Danke @Vineet - ich habe mir hier die Haare ausgezogen :-)
Jim Garrison

@VineetReynolds: Ich habe gesehen, dass Ihre wertvollen Antworten sich auf Jboss und Java ee 6 beziehen. Können Sie mir helfen, dieses Problem zu beheben? stackoverflow.com/questions/28954323/...
Gehirn Sturm

96

Die Korrektur kann so einfach sein wie das Klicken auf Ausführen / Überspringen aller Haltepunkte. Hat für mich gearbeitet.


3
Ich brauchte drei Tage, um zu erkennen, dass ich irgendwie darauf geklickt hatte
Henry

1
Danke ... muss irgendwie versehentlich auf dieses Symbolleistensymbol geklickt haben :-P
Kenyee

4
Danke ... keine Ahnung, wann das angeklickt wurde
njfife

1
Ich danke dir sehr. Wenn Sie in dieser Situation einen Haltepunkt festlegen, wird dieser für andere Benutzer als Schrägstrich angezeigt.
Saurabheights

Das gleiche ist mir passiert. Ich habe nie darauf geklickt ... !! Version: Mars Release (4.5.0) Build-ID: 20150621-1200
Beezer

52

Stellen Sie sicher, dass unter Ausführen> Debug-Konfigurationen die Option "In Hauptstopp stoppen" ausgewählt ist, falls dies für Ihre Situation zutreffend ist.


1
Bitte lesen Sie vor dem Posten unbedingt die vorherigen Antworten. Das Problem war ihre JVM-Version .. und wurde vor drei Jahren gelöst. Es ist am besten, alte Threads nicht wiederzubeleben, es sei denn, Ihre Antwort trägt etwas Bedeutendes bei, das in früheren Antworten noch nicht behandelt wurde.
Leigh

6
Vielen Dank. @Antwort Ihre Antwort hat mein Problem gelöst. Es ist seltsam, dass "Stop in main" nicht gesetzt war.
Yu Shen

25
Es scheint, dass seine Antwort etwas Bedeutendes beigetragen hat, das in früheren Antworten noch nicht behandelt wurde :)
scubbo

Beachten Sie, dass dies eine Option für Java-Anwendungen ist, jedoch nicht für Android-Anwendungen.
Noumenon

21

Wenn mir dies passiert (selten, aber es passiert), bedeutet dies normalerweise, dass sich der ausgeführte Code vom Code im Editor unterscheidet. Bei Eclipse kommt es von Zeit zu Zeit vor, dass die erstellten Klassen und der Code im Editor nicht synchron sind. Wenn das passiert, bekomme ich alle möglichen seltsamen Debugger-Verhaltensweisen (Debuggen von Leerzeilen, Überspringen von Codezeilen usw.).

Wenn Sie Eclipse neu starten, alle Projekte bereinigen und alles neu erstellen, werden die Dinge normalerweise geklärt. Ich hatte auch die Maven-Plugins (ältere Versionen ... hatten sie schon eine Weile nicht mehr), die dazu neigten.

Andernfalls könnte es sich um einen Fehler handeln, der möglicherweise von Vineet angegeben wurde.

Hoffe das hilft


Ja, was Sie angegeben haben, passiert eher in IDEs, die Code nicht automatisch neu kompilieren. Oracle JDeveloper (aus persönlicher Erfahrung) und in geringerem Maße (Netbeans) wurden als mangelhaft befunden.
Vineet Reynolds

1
Guter Rat. Nicht genug gesagt. Manchmal überdenken wir das Problem und es ist nur das System nicht synchron. Zum Beispiel beim Neustart eines Computers zur Fehlerbehebung bei einfachen Problemen.
Xonatron

Danke, das war das Problem in meinem Fall. Es klingt dumm, aber ein einfaches Clean und F5 nach einem Build haben den Job gemacht.
jfajunior

20

Möglicherweise haben Sie versehentlich alle Haltepunkte in der Eclipse-Symbolleiste übersprungen. Um dies zu beheben, gehen Sie zu Eclipse -> Ausführen -> Alle Haltepunkte überspringen.


1
Arggh, es gibt auch eine Verknüpfung dafür. Ich habe höchstwahrscheinlich nicht versehentlich einen Menüpunkt überprüft, aber es ist ziemlich wahrscheinlich, dass ich Strg + Alt + B gedrückt habe. Trotzdem danke.
Patru

3

Projekt -> Clean schien für mich an JRE 8 zu funktionieren


2

Um mit Remote zu debuggen, müssen die Java-Klassendateien zusammen mit den Debugging-Informationen eingehalten werden. Wenn die Option " -g: none " an den Compiler übergeben wurde, enthält die Klassendatei nicht die erforderlichen Informationen, und daher kann der Debugger keine Haltepunkte im Quellcode mit dieser Klasse in Remote abgleichen. Wenn Jars / Klassendateien verschleiert wurden , haben sie auch keine Debug-Informationen. Laut Ihren Antworten ist dies höchstwahrscheinlich nicht Ihr Fall, aber diese Informationen könnten für andere nützlich sein, die mit demselben Problem konfrontiert sind.


2

In meinem Fall war das Problem, dass ich die Debug-Ansicht in der Debug-Perspektive nicht geöffnet hatte, also:

1 - Stellen Sie sicher, dass Sie die Debug-Perspektive geöffnet haben:

Eclipse-Debugger funktioniert nicht 1

2 - Stellen Sie sicher, dass die Debug-Ansicht geöffnet ist:

Eclipse-Debugger funktioniert nicht 2



1

Aktivieren Sie für JDK7 "Ausführen-> Debug-Konfigurationen" die Option "JUnit nach einem Testlauf beim Debuggen weiter ausführen".


1

Ist mir einmal passiert, als ich "Ausführen> Automatisch erstellen" deaktiviert und vergessen hatte, es erneut zu überprüfen.


1

Stellen Sie sicher, dass Sie das Paket oben deklarieren. In meinem groovigen Code stoppt dies an Haltepunkten:

package Pkg1

import java.awt.event.ItemEvent;

isMule = false

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

Dies hört nicht an Haltepunkten auf:

import java.awt.event.ItemEvent;

isMule = false

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

Nachdem ich viel zu kämpfen hatte, löste dies mein Problem. Vielen Dank +1
Federico Piazza

0

So entfernen Sie die Haltepunkte :

  1. Debuggen Sie Ihre Klasse als Junit-Test
  2. Wenn Ihr Debugger stoppt, klicken Sie auf die Registerkarte "Haltepunkte" neben "Variablen" und "Ausdrücke".
  3. Klicken Sie oben rechts auf der Registerkarte Haltepunkt auf die Schaltfläche mit zwei 'X'.
  4. Stoppen Sie den Test, ersetzen Sie Ihren Haltepunkt und führen Sie den Debugger erneut aus

0

Überprüfen Sie auch, ob Haltepunkte in anderen Zeilen funktionieren. Dies kann ein Fehler im Debugger sein. Ich hatte ein Problem mit dem Eclipse-Debugger, bei dem das Setzen eines Haltepunkts für eine boolesche Zuweisung, deren Code in der nächsten Zeile stand, nicht funktionierte. Ich habe dies hier gemeldet , aber in der vorherigen oder nächsten Zeile.


0

Wenn nichts funktioniert-

  1. Entfernen Sie diese Remote- / lokale Debug-Konfiguration und erstellen Sie eine neue.
  2. Fügen Sie die Quelle in Debug-Konfigurationen hinzu.

0

Ein weiteres mögliches Problem besteht darin, dass der Debugger-Port möglicherweise von der Firewall blockiert wird. Zum Beispiel habe ich mule anypoint studio (v 5.4.3) verwendet. Der Standard-Debugger-Port ist 6666. Wenn ein Flow ausgeführt wird, wird er nicht am Haltepunkt gestoppt. Als ich den Port auf einen anderen geändert habe (z. B. 8099), hat es gut funktioniert.


0

Gehen Sie zu Right click->Debug Configurationund überprüfen Sie, ob zu viele Debug-Instanzen erstellt wurden. Mein Problem wurde behoben, als ich mehrere Debug-Instanzen aus der Konfiguration löschte und neu mit dem Debuggen begann.


0

Wenn Sie auf Eclipse sind,

Klicken Sie mit der rechten Maustaste unter "Paket-Explorer" auf Ihren Projektordner.

Gehe zu Quelle -> Bereinige und wähle dein Projekt aus.

Dies wird alle Unordnung beseitigen und Ihr Haltepunkt sollte jetzt funktionieren.



0

In meinem Fall hatte ich mehrere Projekte im selben Arbeitsbereich. Die Java-Datei, die ich zu debuggen versuchte, war in mehr als einem Projekt mit demselben Paket vorhanden.

Ich brauchte das andere Projekt nicht, also schloss ich einfach nicht verwandte Projekte (oder entfernte die Datei aus einem nicht verwandten Projekt).


0

Ein zusätzlicher Kommentar zur Antwort von Vineet Reynolds.

Ich fand heraus, dass ich einstellen musste -XX:+UseParallelGC ineclipse.ini

Ich richte die Argumente der virtuellen Maschine (VM) wie folgt ein

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

das löste das Problem.


-2

Das funktioniert bei mir:

Ich musste meine lokale Serveradresse wie folgt in die PHP- Serverkonfiguration einfügen :

Geben Sie hier die Bildbeschreibung ein

Hinweis : Diese Adresse ist diejenige, die ich in meiner Apache .conf- Datei konfiguriere .

Hinweis : Der einzige Haltepunkt, der funktionierte, war der "Bruch in der ersten Zeile". Danach funktionierten die Haltepunkte nicht mehr.

Hinweis : Überprüfen Sie Ihre xdebug- Eigenschaften in Ihrer php.ini- Datei und entfernen Sie alle, die Sie für nicht erforderlich halten.


1
Ich kann nicht sehen, wie dies die Frage beantwortet (über JUnit- und Java-Debugging)
Newtopian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.