[debuggen] nich geschlossene Resource "finden"

dermoritz

Bekanntes Mitglied
ich hab da so eine Klasse die diverse Dinge Mit Dateien und Ordner macht. Z.B. Dateien zippen und Ordner umbenennen. Nun hab ich das Problem das die allerletzte umbenenn-Operation nicht funktioniert (es wird false zurückgegeben, im Explorer kann ich den Ordner solange das Programm läuft auch nicht umbenennen).

Die Frage ist nun, gibt es eine Möglichkeit herauszufinden welche Methode oder Klasse die Resource geöffnet hält bzw. vergessen hat sie zu schließen? Eventuell über Eclipse Debugger oder visualvm oder andere Tools?
 
Unlocker oder LockHunter habe ich mir auch schon überlegt aber das zeigt dir doch nur den Prozess an, der die Datei zu dem Zeitpunkt lockt (in dem Fall java, javaw oder so).

Ich kenn jetzt kein Tool, was das macht. Sollte doch aber allein durch den SourceCode und Debugging möglich sein, sowas zu finden...

edit: kurz mal in Eclipse angeschaut. Gibt an einem Reader Objekten ein Attribut isOpen. Damit könntest du vllt sehen, welche Reader noch geöffnet sind (Wenn du z.B. ganz am Ende ein System.out.println("hallo welt") machst und dort einen Breakpoint setzt, fallen dir zumindest schonmal alle auf, die nicht geschlossen werden und erst durch das Beenden der VM die Ressource wieder freigeben)

edit2: Bzw. in deinem Fall tuts ein Breakpoint bei dem nicht funktionierenden rename eher.
 
Zuletzt bearbeitet:
vielen dank für den "reader objekt"-tip. werd ich mir mal anschauen.

Ich dachte nur das es etwas direkteres gibt analog zu Resourcen cpu und mem, bei denen ich ja sehen kann in welchen Objekten sie verbraten werden, könnte man ja auch andere Resourcen anzeigen.

Mit blankem debuggen -zeile für zeile durchgehen und checken wann der Lock aktiv ist- bin ich schon ein ganzes Stück weiter. Um das in Zukunft zu verhindern: gibt es eine Möglichkeit sowas in nem Unittest pauschal zu prüfen - also zu fragen sind noch irgendwelche Resourcen geöffnet.

Manchmal hilft auch findbugs und moniert, dass eine Resource eventuell nicht geschlossen wird, aber eben nicht immer.
 
ne der nützt nix - denn den Prozess, der die Ressource hält kenn ich - meine Java-Programm. Ich würde aber gerne Wissen welche Klasse oder besser Methode die Resource nicht schließt.
(inzwischen hab ich es mit mühseligem debugging rausgekriegt.-- Es war ein nicht geschlossener "Scanner".--
Nichts desto trotz wär etwas schön was einem zumindest klassenbezogen die verwendetetn Ressourcen anzeigen kann.)
 

Zurück
Oben