Welche Art von Änderungen kann im Eclipse-Debugger in die laufende JVM "Hot-Code-ersetzt" werden?

8

Wenn Sie in Eclipse ein Programm unter "Debug" ausführen, können Sie Änderungen am Code vornehmen, und die meiste Zeit wird es sofort wirksam.

Manchmal wird dies jedoch nicht der Fall - in diesem Fall wird eine Meldung angezeigt oder "(möglicherweise nicht synchron)" neben den Threads im Debug-Fenster angezeigt.

Was bestimmt die Art von Änderungen, die im laufenden Betrieb ausgetauscht werden können? Ich habe bemerkt, dass diese Änderungen normalerweise fehlschlagen:

  • Einführung neuer anonymer innerer Klassen
  • Ändern von Klassen (Umbenennen / Hinzufügen / Entfernen von Feldern und Methoden), wenn die Klasse instanziiert wird
  • einen try-catch-Block hinzufügen

Aber manchmal scheint es fast zufällig zu sein. Was ist die Logik hinter der Bestimmung, ob Code ersetzt werden kann oder nicht?

    
PBJ 04.08.2011, 21:43
quelle

1 Antwort

9

Methodenanweisungen (prozeduraler Code) funktionieren. Alles, was mit dem Hinzufügen, Entfernen oder Ändern von Klassenschemas zu tun hat, funktioniert nicht. Also keine Änderungen an Vererbung, Feldern, Methoden extrahieren, Signaturen ändern usw.

Normalerweise funktionieren Hot-Swapping-Methodenanweisungen nicht, wenn Sie gleichzeitig etwas Verbotenes tun. Dann ist die Hot-Swapping-Verbindung sozusagen "kaputt".

Eine Sache, die ich nicht sicher kenne, sind anonyme Klassen. Habe das noch nie im Zusammenhang mit Hot-Swapping versucht.

Edit: Die Jungs dort bei zeroturnaround haben eine Liste in ihrem Feature-Bereich zusammengestellt, die der jvm-Debugger nicht sofort auspacken kann, um sein Produkt zu promoten: Ссылка . Ob Sie das Werkzeug mögen oder nicht, die Liste spiegelt meine Erfahrung wider.

    
Stefan Schubert-Peters 04.08.2011, 21:51
quelle

Tags und Links