2009-11-10 4 views
22

Ich debugge etwas älteren Code, in dem wir ein zwischengespeichertes Objekt haben, das scheint, extern geändert zu werden.Gibt es eine Möglichkeit, im Eclipse-Debugger benachrichtigt zu werden, wenn sich der Status eines Java-Objekts ändert?

Wenn ich den Objektbezeichner dafür (während des Debuggens) kenne, gibt es eine Möglichkeit, es zu "beobachten", wenn ein anderer Code im selben Thread oder einem anderen Thread versucht, seinen Status zu ändern ?

Ich kann nicht nur eine Ausdrucküberwachung dafür verwenden, da Verweise auf dieses Objekt an anderer Stelle vorhanden sein können und es viele Instanzen der gleichen Klasse gibt.

+0

Können Sie nur Breakpoints bei jeder Methode setzen? Gibt es zu viele? –

+0

Natürlich setzen Sie einen bedingten Haltepunkt in jede der Methoden der Objektklasse, die den Zustand des Objekts ändern könnte. Der bedingte Ausdruck, der nur von "this" bricht, ist die Objektkennung. –

+0

Die Eigenschaften werden direkt manipuliert (ich habe diesen Code NICHT geschrieben ...) – Uri

Antwort

17

Legen Sie einen Haltepunkt im Code fest, an dem Sie anhalten möchten, wenn sich der Wert ändert.

  • Start in der Haltepunktansicht.
  • Wählen Sie den Haltepunkt
  • Rechtsklick und lese die „Haltepunkt-Eigenschaften“
  • Überprüfen Sie das Feld ‚Bedingung aktivieren‘
  • im Textfeld den Namen der Variable eingeben
  • wählen sehen die ' Wert der Bedingung ändert 'Radiobutton
+0

Ich verstehe nicht "Sie wollen anhalten, wenn sich der Wert ändert". Sie können also überall einen Haltepunkt setzen (auch im toten Code), und wenn sich der Wert ändert, werden Sie an dieser Stelle gestoppt? Können wir nicht sagen, dass wir "einen Haltepunkt machen und stoppen, wenn sich der Wert ändert"? – lmo

14

Wenn es irgendwo als eine Klasse oder Instanzvariable deklariert ist (sollte sein, wie sonst könnten Sie Cache es), dann können Sie auch nur einen Haltepunkt auf der jeweiligen Linie setzen. Es wird watchpoint genannt und wird standardmäßig auf Zugriff und Änderung (konfigurierbar über Haltepunkt Eigenschaften) ausgelöst werden.

+0

Es ist keine Variablenänderung, sondern eine Änderung des Zustands eines Objekts, die überwacht werden muss. –

+0

Legen Sie dann die Haltepunkte für die Objekteigenschaften fest. – BalusC

+0

@BallusC: Wenn nur jemand, der diesen Code geschrieben hat, tatsächlich Getter und Setter verwendet :) – Uri

Verwandte Themen