2009-04-06 5 views
68

Ich habe ein kleines Projekt bekommt die, wenn sie in dem Eclipse-Debugger ausführen, immer in FileInputStream.class Linie 106 zu stoppen scheint, wo die Dateien geöffnet werden. Es sind keine Breakpoints gesetzt, aber Eclipse verhält sich genau so, als hätte ich hier einen Breakpoint. Wenn ich alle Haltepunkte lösche, passiert es immer noch.Warum hat mein Eclipse-Projekt Phantom Debugger Breakpoints?

Ich habe ein zweites viel größeres Projekt in demselben Eclipse-Workspace, die von diesem Problem nicht betroffen.

Ich habe gerade das kleinere Projekt von meiner alten Linux-Maschine entfernt, wo ich es in Europa Eclipse entwickelt habe und hatte dieses Problem auf meiner neuen Windows-Maschine, wo ich weiterhin das Problem in Ganymede Eclipse sehe. Das Problem besteht weiterhin zwischen Betriebssystemen und Eclipse-Versionen, jedoch anscheinend nicht projektübergreifend. Ich verstehe es nicht! Ich habe jede Datei im Projektverzeichnis durchsucht und konnte nichts finden, was eine Datei sein könnte, die Eclipse dazu bringt, in FileInputStream anzuhalten.

Weitere Informationen: der scheinbare Haltepunkt ist eigentlich nicht für Zeile 106 von FileInputStream; Es scheint ein Ausnahmebreakpoint für FileNotFoundException zu sein, der aus systemeigenem Code ausgelöst wird, der von dieser Zeile in FileInputStream aufgerufen wird. Aber auch hier scheinen mir keine Breakpoints gesetzt zu sein. Sind Ausnahme-Breakpoints an anderer Stelle definiert?

+0

ich, dass man sich fragen, war, finde ich mich oft an Haltepunkten zu stoppen, dass ich Ich hätte schwören können, dass ich es entfernt habe. – Uri

+0

Nur ein paar Erklärungen zu dieser Funktion "Aussetzen bei jeder nicht abgefangenen Ausnahme" hinzugefügt, wie angefordert – VonC

Antwort

110

Haben Sie versucht, zu un-select

Window > Preferences > Java > Debug : Suspend execution on uncaught exceptions 

? (Wie mentioned in this thread, zum Beispiel)

alt text

Warum funktioniert Eclipse-so?

Es goes back to 2002, wenn die Hierarchie des Haltepunktobjekts reduziert wurde.

Um einen Haltepunkt zu setzen, mit der alten API, ein Client benötigte Java Modell Objekte - wie IType, IField usw.
Mit der neuen API, alles, was durch den Debug-Modell benötigt wird, ist Typ Namen, Feldnamen usw.

Diese Clients zur Verfügung ermöglicht Haltepunkte zu setzen, wenn Java Modellobjekte sind es nicht.
Clients geben jetzt die Ressource einen Breakpoint zu verknüpfen mit (bevor wir es mit den zugehörigen Java Modell Ressourcen beschränkt).

Breakpoints können jetzt auch "versteckt" werden. Das heißt, sie müssen nicht beim Haltepunktmanager registriert sein.
Haltepunkte auch selektiv beibehalten werden können (alle Marker nur dann erlaubt/none eines Markertyp beibehalten werden).
Dies macht das Debug-Modell flexibler und gibt den Clients mehr Bausteine.

Dies hat auch einen Teil unserer Java Debug-Implementierung vereinfacht - zum Beispiel das Merkmal „suspend on any uncaught exception“, setzt einfach einen Haltepunkt für die „java.lang.Throwable“, anstatt ein bestimmtes IType in einem bestimmten Projekt genannten Art.
Der Haltepunkt mit dem Haltepunkt-Manager nicht registriert ist (d.h.versteckt) - es ist nur bekannt und wird von einem Kunden verwendet. Ein anderes Beispiel ist das "run to line breakpoint". Die IJavaRunToLineBreakpoint wurde entfernt, da ihre spezielle Funktionalität nicht mehr benötigt wird. Jetzt erstellt das Java-Debug-UI einfach einen "Zeilen-Haltepunkt", der versteckt, nicht persistent ist und eine Trefferanzahl von 1 aufweist. Dies ist ein Beispiel für das Bereitstellen von Bausteinen für Clients.

+0

Das hat es geschafft! Vielen Dank! Warum funktioniert Eclipse überhaupt so? – skiphoppy

+0

Es hilft beim Erkennen dieser ungeprüften Laufzeitausnahme, die von Ihrem Code nicht erfasst werden. – VonC

+0

Ich stoße auf das gleiche Verhalten und habe die Option "Ausführung auf Ausnahmefehler aussetzen" nicht deaktiviert. Ich lasse es lieber, wenn die Option aktiviert ist, aber ich würde gerne wissen, welche Ausnahme aufgetreten ist. Wie kann ich das wissen? – HAL9000

34

Ich hatte ein ähnliches Problem, aber die akzeptierte Lösung funktionierte nicht für mich. Ich mache Eclipse Android-Entwicklung und hatte einige Haltepunkte gesetzt und später unscharf gemacht. Obwohl ich sie deaktivierte, stoppte Eclipse die Ausführung an diesen Phantom Breakpoints. Die Lösung für mich war das Fenster Haltepunkte zu öffnen:

Fenster> Sicht anzeigen> Andere ...

Test> Haltepunkte

Dann Recht vor, einen Haltepunkt klicken und wählen Sie „Alle entfernen“

Leider müssen Sie alle Ihre gültigen Breakpoints zurücksetzen, aber das hat für mich funktioniert und hat viel Angst und Frustration verhindert.

Einige Fotos führen andere:

Add Breakpoints window to Eclipse

Remove All (Breakpoints, right click)

+0

Danke, Mark. Das hat geholfen. Aber ich habe sie nicht alle entfernt, sondern nur denjenigen gefunden, der Ärger verursacht hat. – morphium

+0

Danke! Arbeitete für mich, aber wie der Typ oben, entfernte ich nur den, den ich brauchte. Frustrierend, dass ein registrierter Haltepunkt nicht einmal in der Editor-Ansicht auf der Seitenleiste angezeigt wird. Wahrlich, sie sind in diesem Fall "Phantom" -Punkte. – The111

+0

Ich habe möglicherweise die Lösung für das Problem in Bezug auf Ihre Problemumgehung gefunden. Wenn es das nächste Mal passiert, versuche meine Lösung unten. – HAL9000

4

Für diejenigen, die keine anderen Lösungen nützlich gefunden, ich meine persönliche Lösung für mein Problem. Ich arbeite mit einer .jar-Bibliothek, die durch das Erstellen eines anderen Projekts in den Arbeitsbereich generiert wird. Wenn ich in einem .java einen Unterbrechungspunkt in dem Bibliotheksprojekt festlege, wird der Haltepunkt beim Debuggen des endgültigen Projekts ausgelöst. Wenn jedoch der Debugger die Ausführung unterbricht, wird die .class-Datei angezeigt, die ihre eigenen Haltepunkte hat und daher wird der in der .java-Datei gesetzte Haltepunkt hier nicht angezeigt!

Lösung: Um den Haltepunkt Sie den Breakpoint in die .java-Datei, in der Bibliothek Projekt zu entfernen, zu entfernen.

0

Für diejenigen, die keine Lösung aus den vorherigen Antworten gefunden haben, können sie versuchen, was mein Problem gelöst hat. Es ist ich denke ähnlich wie HAL9000 Problem/Lösung

Wenn Sie zwei Klassen mit dem gleichen Namen (in zwei verschiedenen Projekten) die Haltepunkte auf der einen haben, gelten auch auf der anderen. Beide werden im Fenster "Breakpoints" angezeigt.

Lösung: Wenn Sie den Haltepunkt aus der Klasse entfernen - mit dem gleichen Namen - die Sie nicht verwenden, entfernt den Haltepunkt aus der Klasse, die Sie debuggen.

1

Ich stieß auf ein Problem, wo eine Quelldatei persistente Markierungen für Haltepunkte hatte, die nicht existierten. Ich habe versucht, das Projekt zu säubern, einen kompletten Build zu machen und Eclipse neu zu starten - nichts hat funktioniert.

Ich ging graben durch die Eclipse-Metadaten und fand die Projekte .markers Datei. Durch das Löschen dieser Datei wurde das Problem endgültig behoben.

Für alle anderen, die dieses Problem haben, öffnen Sie Ihr Arbeitsbereichsverzeichnis, navigieren Sie zu .metadata/.plugins/org.eclipse.core.resources/.projects/Ihrem Projekt und benennen Sie die Datei .markers um.

Zum Beispiel, wenn Sie Ihr Arbeitsplatz Ordner ~/Arbeitsbereich ist, und Ihr Projekt Foo genannt, könnten Sie tun:

$ mv ~/workspace/.metadata/.plugins/org.eclipse.core.resources/.projects/Foo/.markers ~/safe.Foo.markers 
Verwandte Themen