# Eclipse, beim Debugger Objekte nach Wert durchsuchen



## george (22. Jan 2013)

Sry es ist eigentlich eine Eclipse-Frage, aber da viele ja Eclipse zum Erlernen von Java nutzen fand ich ich es hier doch bei Basics passend.
[Anmerkung SlaterB: und doch verschoben  ]

Ich versuche gerade in Eclipse mit der Java Excel API, Werte aus einem Excel Sheet zu lesen.

Ich wüsste gerne ob mein Methode den richtigen Sheet-Namen einliest, bzw in dem Sheet den richtigen String einliest.

Nun kann der mir im Debug-Modus ja meine Sheet-Variablen/Objekte anzeigen lassen, aber diese sind sehr groß (riesige Baumstruktur) und ich finde einfach meinen Wert nicht.

Nun die Frage ist: Wie kann ich diese Baumstruktur durchsuchen ohne alle von Hand zu  öffnen. Mein Problem ist auch, dass ich gar nciht weis unter welcher Variable im Objekt mein String steht.


----------



## faetzminator (22. Jan 2013)

Das funktioniert so nicht, zumindest nicht mit dem Debugger. Normalerweise schreibt man sich dafür JUnit-Tests, welche man gegen die Klasse laufen lässt. In diesen (J)Unit-Tests werden solche Dinge geprüft.


----------



## SlaterB (22. Jan 2013)

bisschen billig, debuggen muss man doch täglich tausende Dinge, was unterscheidet diesen speziellen Fall von anderen bzw. was ist das Kriterium für JUnit?
- Debugger weg, jeder einzelne Prüfung gleich JUnit?
- wenn Debugger zu kompliziert, dann JUnit?

soweit ich es vom Hörensagen kenne gibt es in Debuggern die Möglichkeit kleine Fenster mit Code zu befüllen um etwas mehr als nur direkt Variablen anzuschauen,
für diese Suche dürfte das aber nicht reichen, ich empfehle auch normalen Code,
natürlich kein JUnit für eine einmalige Sache, einfach Code normal ablaufen lassen und mit System.out.println() den Programmzustand untersuchen

wenn du den inneren Aufbau von Objekten nicht kennst wird es schwierig, wobei du in Java vielleicht doch letztlich Methoden wie getSheetName() abfragen kannst, was im Debugger vielleicht nicht direkt ins Auge fällt, obwohl evtl. möglich,

anderenfalls mit aufwendigen Reflection-Monstern arbeiten, da kommt der Debugger durchaus auch wieder leicht in Frage,
der Reflection-Blick ist seine tägliches Brot, aber wenn es nun mal nicht genau eine passende Methode 'suche in internen Aufbau' gibt, wie ich vermute, dann zu unflexibel gegenüber normalen Code


----------



## Tomate_Salat (22. Jan 2013)

SlaterB hat gesagt.:


> soweit ich es vom Hörensagen kenne gibt es in Debuggern die Möglichkeit kleine Fenster mit Code zu befüllen um etwas mehr als nur direkt Variablen anzuschauen



Möglichkeit a) Windows > show view > other... da nach "Display" suchen. In diesem View kann man Code eintragen und präzise ausführen (Code markieren + auf das Lupensymbol klicken)

Möglichkeit b) im source eine code-zeile markieren -> rechtsklick -> Inspect (Strg+shift+i). Geht auch, dass man on-the-fly code in seine sourcecode datei einfügt (speichern ist nicht notwendig) und dann das inspect ausführt ... ist also das gleiche wie Möglichkeit a nur eben nicht in einer separaten view.


----------



## Gonzo17 (22. Jan 2013)

Kleiner Hinweis, auch wenn das in diesem Fall vielleicht nicht 100% passend ist. Es gibt auch die Möglichkeit Breakpoints mit einem Stückchen Code zu versehen. Einfach mal Rechtsklick auf den Breakpoint und "Breakpoint Properties" anklicken.


----------



## faetzminator (23. Jan 2013)

GeorgW hat gesagt.:


> Ich wüsste gerne ob mein Methode den richtigen Sheet-Namen einliest, bzw in dem Sheet den richtigen String einliest.



SlaterB, da willst du mir sagen, dass dies nicht für einen JUnit-Test prädestiniert ist  ?


----------



## SlaterB (23. Jan 2013)

ich sage, dass das eins von 100 Problemen ist, die man täglich vor sich hat,
und die Methode dafür wahrscheinlich noch dreimal umgeschrieben wird

ohne Nachdenken JUnit einzusetzen kann ein ganzes Leben kosten, ohne dass irgendwem geholfen ist


----------



## Gonzo17 (23. Jan 2013)

SlaterB hat gesagt.:


> ich sage, dass das eins von 100 Problemen ist, die man täglich vor sich hat,
> und die Methode dafür wahrscheinlich noch dreimal umgeschrieben wird
> 
> ohne Nachdenken JUnit einzusetzen kann ein ganzes Leben kosten, ohne dass irgendwem geholfen ist



Ob jetzt JUnit oder nicht, ist relativ egal, aber ich persönlich sehe die Bedeutung von Tests wahrscheinlich etwas anders als du.

Für mich ist so eine Aufgabe auch prädestiniert dafür mit Tests ausgestattet zu werden. Denn eine Test-Suite hat letztlich einige Vorteile. Man hat einen bekannten Input, hat eine Erwartung an das Ergebnis und testet somit genau das Stückchen Code, das davon betroffen ist. Das kann man natürlich auch als "Wegwerf-Test" modellieren oder einfach per Debugging so lange anpassen, bis es klappt. Aber hat man mal einen Test geschrieben, dann kann der für alle Zeit laufen und sobald - aus welchem Grund auch immer - diese eine Codestelle ein falsches Ergebnis liefert, wirst du es merken, da die Test-Suite dir das sagt.


----------



## Tomate_Salat (23. Jan 2013)

SlaterB hat gesagt.:


> ich sage, dass das eins von 100 Problemen ist, die man täglich vor sich hat,



Es geht ja auch nicht darum, zu jedem Problem einen Test zu schreiben. Aber Methoden zu testen ist sicherlich keine schlechte Idee und so wie sich das hier ließt, hat der TO ja eine eigene Methode für dieses Problem.


----------

