PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Javadebugging


ethrandil
2004-03-13, 18:04:49
*heul*
Ich bracuh was zum Debuggen...

Und zwar gibt es anscheinend noch irgendwo Referenzen auf eine Komponente in einem geschlossenen Fenster...

Wie finde ich die?

- Eth

Darkstar
2004-03-13, 20:21:03
Die meisten Java-IDEs (NetBeans (http://www.netbeans.org/) auf jeden Fall) sollten einen Debugger beinhalten. Keine Ahnung, ob sich damit auch dieses Problem finden und lösen läßt.

ethrandil
2004-03-13, 20:29:19
Meine IDE hat auch einen Debugger (Eclipse).

Ich weiß aber nicht wie das damit gehen könnte ;)

Jemand ne Idee?

HellHorse
2004-03-13, 22:58:35
Wie sieht das Problem denn genau aus? Fehlermeldung?
Wenn du das Programm einfach so aus Eclipse laufen lässt, sollte der Stacktrace (da kann man normalerweise einfach auf die Linien clicken und er springt auf die Zeile im Code) doch helfen, den Ort zu finden, wo das Problem auftritt. Das kannst du ja als Ausgangspunkt nutzen.

Vermutlich einer der Momente, wo man sich den Smalltalkdebugger herwünscht.

ethrandil
2004-03-14, 00:05:09
Es gibt kein Problem, das meinen Programmablauf gefährdet, das ist das gefährliche...

Ich habe ein Hauptfenster, und kann von dort aus Unterfenster öffnen.

Wenn ich nun so ein unterfenster schließe kann der GarbageColector das Objekt immernoch nicht löschen. Weiß der Geier warum!

Und darum bräuchte ich mal eine Angabe, wo da noch Referenzen gehalten werden... am liebsten einen Graphen.... gibts das??

- Eth

HellHorse
2004-03-14, 00:24:00
dispose() hast du aufgerufen?

ethrandil
2004-03-14, 00:31:18
Original geschrieben von HellHorse
dispose() hast du aufgerufen?
ja.
Muss ich noch was mit den Komponenten tun?

Kann es sein, dass der GC bei einer komplizierten Struktur nicht erkennt, dass ein ganzer 'Klumpen' von Objekten eigentlich frei ist?

- Eth

HellHorse
2004-03-14, 10:47:31
Original geschrieben von ethrandil
ja.
Muss ich noch was mit den Komponenten tun?

Nein, haben sie ja gar nicht. ;)

Original geschrieben von ethrandil
Kann es sein, dass der GC bei einer komplizierten Struktur nicht erkennt, dass ein ganzer 'Klumpen' von Objekten eigentlich frei ist?

- Eth
Theoretisch, falls kein Mark-and-Sweep vorhanden ist.

BTW, wie weisst du eigentlich, dass das Fenster nicht vom GC gekillt worden ist?
Hast du irgendwo eine Speicheranzeige, und der frei Specher erhöht sich nicht?
Hast du schon versucht, den GC und die Finalisierung explizit aufzurufen per System.gc() ('http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#gc()'), bzw System.runFinalization() ('http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#runFinalization()')?
Kann nämlich sein, dass die VM ihn zurückhält, bis sie das Gefühl hat, der Zeitpunkt sei günstig.
IDEA hat einen Speichermeter und einen Button um den GC aufzurfen. Wann immer der Speicherverbrauch weit über 50MB ist, den Button drücken und mindestens 20MB werden frei. Habe so was bei Applets beobachtet. Applet beendet, aber immer noch 4MB belegt. Aus der Javakonsole den GC aufgerufen und gut ist.

ethrandil
2004-03-14, 12:09:59
Ich lasse das ganze im Profiler laufen, und der zeigt mir an, dass (trotz mehrmaligem drücken der GC-Taste ;)) meine Objekte noch existieren.

Aber ich glaube ich habe einen Fix gefunden.

Ich hab das ganze bis auf ein JMenu lokalisiert, und diese Rückmeldung bekommen:
http://forum.java.sun.com/thread.jsp?forum=57&thread=502583

Das werd ich mal testen.

- Eth

EDIT: Nö, geht nicht :/