Debugging in Elipse



  • Hi !

    Weiß einer, wo ich ein gutes Tutorial über das Debbugging,
    speziell das remote Debugging, unter Eclipse finden kann.
    Die Hilfe in Eclipse finde ich persönlich nicht so toll
    und ich würde gerne mal tiefer in das Thema einsteigen,
    da Eclipse ja doch viele Möglichkeiten bietet.

    MfG

    Gamba



  • Also ein Tutorial kann ich dir net bieten, aber mal was Grundsätzliches zum remote debugging.

    Wenn man eine Java-Applikation startet ist es defaultmäßig erst mal net möglich diese remote zu debuggen. Um das zu erreichen muß man dem Aufruf von "java" spezielle Parameter hinzufügen.
    So aktiviert man mit
    java -Xdebug ....
    das remote debugging.
    Es werden aber noch andere Parameter benötigt wie z.B. das verwendete Protokol oder auch den Port worüber Informationen von der Anwendung zum Debugger übermittelt werden und umgekehrt.

    ein üblicher Aufruf so einer Applikation wäre z.B.
    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 org.gamba.MyApp

    Diese Aufruf wird für die meisten Fälle ausreichend sein.
    Die Parameter sind aber auch recht ausführlich von Sun dokumentiert unter dem Stichwort "Java Platform Debugger Architektur".

    Kurze Beschreibung:
    -Xrunjdwp - weist darauf hin das als Protokol JDWP (Java Debug Wire Protocol) benutzt wird, IMHO gibt es zur Zeit auch kein anderes

    transport=dt_socket - Kommunikation zwischen Debugger und Anwendung läuft über Standard TCP/IP-Sockets. Statt dt_socket kann man auch dt_shmem (shared memory transport) nehmen was aber ein MS-Protokol ist und nur auf Windows funzt und auch nur wenn Anwendung und debugger auf dem selben Rechner laufen. Aber keine Sorge Eclipse nimmt dir die Entscheidung ab da eh nur dt_socket unterstützt wird.

    address=8000 - der Port über dem die Kommunikation läuft

    dann gibts da noch so Sachen wie "suspend" was angibt ob die Applikation erst gestartet wird wenn der Debugger sich Connected oder auch unabhängig vom Debugger läuft.
    Aber wie gesagt ist alles ausführlich von Sun dokumentiert.

    Was hat das ganze mit eclipse zu tun?
    Erstmal net viel, das obere Verfahren kannst du auch verwenden wenn du eine Anwendung mit Hilfe des im JDK mitgelieferten Tool "jdb" remote debuggen willst.

    Aber wenn du dir mal so eine 'Launch Configuration' für's remote debugging in Eclipse erstellst wirst du feststellen das der einzige unterschied zum lokalen debuggen der "Connect"-Tabreiter ist.
    - Hier kannst du dein Projekt angeben
    - "Connection Typ" ist 'ne ComboBox wo du nur "Standard (Socket Attach)" wählen kannst (= dt_socket s.o.)
    - den Server
    - und den Port (= address s.o.)
    - die "Allow termination of remote VM" besagt nur das du die VM über den debuggen beenden kannst.

    Mehr ist es einfach nicht, im Prinzip brauchst du kein Tutorial. So kannst du ganz normal debuggen wie man es auch lokal macht.

    bis dänn, O'Dog (ist doch a bissel mehr text geworden)

    P.S. falls du ein AppServer verwendest muss du in dessen Doku gucken wie du an den remote debug Port kommst. Manche AppServer geben auch einfach beim Start im Debug-Mode die Port-Nummer in der Konsole aus.


  • Mod

    ...wo es hier gerade ums Debuggen geht:

    Wie stark nutzt ihr Möglichkeiten zum Debuggen? Welche Möglichkeiten nutzt ihr, wie debuggt ihr?



  • <werbung>
    Eigentlich sollte jede IDE so eine Schnittstelle zum remote debugging haben ist ja schließlich Standard. Letzens hat ein Kollege Versucht das mit dem JBuilder Enterprise zum laufen zu bekommen, nach 1 Woche und 2 Supportanfragen lief das Teil immer noch nicht richtig. Braucht für jeden AppServer ein eigenes Plugin und jede Menge manuelle Einstellungen. Da sind die 3000€ für die JBuilder lizenz bestens angelegt 🙂 Da lob ich mir doch mein Eclipse
    </werbung>


  • Mod

    [werbung]
    BTW : Ich wollte mich auch nochmal so ganz nebenbei zu Eclipse bekennen. Ich nutze diese IDE zwar erst seit kurzer Zeit, sie gefällt mir aber jetzt schon sehr gut.
    [/werbung]
    🙂



  • Original erstellt von Gregor:
    Wie stark nutzt ihr Möglichkeiten zum Debuggen? Welche Möglichkeiten nutzt ihr, wie debuggt ihr?

    Unterschiedlich. Ich arbeite überwiegend mit AppServern da kann remote debugging teilweise 'ne Menge Zeit sparen. Beispielsweise wird im aktuellen Projekt so'n AppServer von Sybase verwendet da ist das deployen recht zeitaufwendig. Wenn man eine Code-Änderung macht muss man ein Web-Archiv erstellen, dann mit Hilfe eines Managers diese Archiv im Server laden und anschließend den Server refreshen.

    Wenn ich 'ne Aussagekräftige Fehlermeldung bekommen kann ich das auch so fixen und wieder neu deployen. Wenn ich aber nicht sicher bin spring ich per debugger an die entsprechende stelle und kann denn Fehler recht schnell finden, ist besser als zig mal nach vermutungen Codestellen zu ändern, wieder verwerfen und neu deployen.

    O'Dog


  • Mod

    Hmmm... Ich nutze eigentlich ziemlich wenig Debugging-Möglichkeiten. Bei mir treten folgende Fehler auf:

    • Code kompiliert nicht. -> Hier reichen mir die Fehlermeldungen meistens aus, um den Fehler in kürzester Zeit zu finden. (meistens weniger als eine Minute)
    • Beim Ausführen des Programms wird eine Exception geschmissen. -> Hier dauert es schon etwas länger. Meistens kann man aber mit der Fehlermeldung den Ort, an dem der Fehler auftritt, sehr schnell und auch recht genau bestimmen. Da dauert es meistens ein paar Minuten, bis ich den Fehler behoben habe.
    • Es fällt mir sofort auf, dass der Code nicht zum gewünschten Resultat führt. -> Hier dauert es oft sehr lange, bis ich den Fehler finde. Oft kann ich den Ort, an dem der Fehler auftritt nur auf 100 Codezeilen oder so genau bestimmen. Es wäre hier angebracht, einen Debugger zu nutzen, das mache ich aber meistens nicht. Manchmal schreibe ich hier den entsprechenden Code neu oder teilweise neu. Ich bin mir hier oft nicht darüber im Klaren, wie ich einen Debugger anwenden kann. Die Zwischenergebnisse sind hier auch oft so kompliziert, dass ich sie nicht von Hand nachprüfen kann oder möchte.
    • Ich mache etwas ganz anderes und plötzlich fällt mir ein, dass der Algorithmus, den ich vor ner Woche oder so implementiert habe, eigentlich fehlerhaft sein müßte. -> Der Fehler ist hier natürlich wieder recht schnell zu finden.

    Bei den letzten beiden Fehlerarten dauert es meistens länger, den Fehler zu beheben.



  • @O'Dog: Danke für die ausfürliche Hilfe. Die Parameter kannte ich auch schon, aber wußte nichtr was sie alle bedeuten. Mir ging es eher darum zu wissen, was man unter Eclipse noch während des Debuggens für Möglichkeiten hat, denn das ist nicht so selbsterklärend. Wir Debuggen bei uns des öfteren auf AppServern, aber schon das mit dem Variablen erkennen ist unter Eclipse meines Erachtens nicht trivial. Es gibt außerdem noch diverse Registerreiter die ich gerne mal genau erklärt bekommen würde.

    @Gregor: Wie schon oben erwähnt debuggen wir sehr oft, da es meist schneller geht, da wir sehr viele Komponenten haben und diese sonst immer neu bauen müssen, deployen, AppServer neu starten usw.
    Wir bauen aber auch oft Ausgaben ein, wenn wir mit den Fehlertexten nicht so viel anfgangen können (und das ist oft der Fall). Deswegen ist es für mich wichtig die Debugmöglichkeiten von Eclipse voll auszureizen.

    [ Dieser Beitrag wurde am 23.01.2003 um 17:15 Uhr von Gamba editiert. ]



  • Hallo Gregor,

    dein Beitrag verwundert mich ein wenig.
    Denn ich sehe den Debugger als eine super möglichkeit
    meinen Code zu testen.

    Durch das setzen verschiedener varbiablen Werte hat mann tolle Möglichkeiten
    verschiedene Szenarien in kurzer Zeit durchzuspielen.
    Mir passierts noch oft das betimmte Dinge einfach nicht beachtet
    wurden was sich dann gerade bei der nachprüfung im Detail im Debugger
    zeigt.

    Zudem programmiere ich teilweise mit Debugger an (sobald es sich um einen
    komplizierten Algorythmus in einer Methode handelt.
    Ich kann so gleich testen, ob meine Gedankengänge nicht etwas wirr sind 😉
    und unbedachtete Dinge passieren.

    Seit ich so programmiere haben sich viele Logic Fehler vermeiden lassen.
    Damit Debugge ich teile der Anwendung dann wenn ich meinen eigenen Code
    am besten überschauen kann (kurz nach dem entwickeln).


  • Mod

    Original erstellt von HolyFly:
    **Hallo Gregor,

    dein Beitrag verwundert mich ein wenig.
    Denn ich sehe den Debugger als eine super möglichkeit
    meinen Code zu testen.

    Durch das setzen verschiedener varbiablen Werte hat mann tolle Möglichkeiten
    verschiedene Szenarien in kurzer Zeit durchzuspielen.
    **

    Dummerweise mache ich meistens etwas mit Bildern, wenn ich programmiere. Die meisten Algorithmen, die ich schreibe, verarbeiten Bilder. Das heißt, dass die Daten, die ich verarbeite, normalerweise so komplex sind, dass ich nicht einfach nachprüfen kann, ob richtig gerechnet wurde. Ich kann so auch nicht feststellen, an welcher Stelle ein Fehler aufgetreten ist, da die Zwischenergebnisse auch sehr komplex sind. Die einfachste Möglichkeit, herauszufinden, ob ein Algorithmus bei mir richtig gearbeitet hat, ist sich das Bild am Schluss anzugucken. ...allerdings findet man so auch nicht alle Fehler.



  • Original erstellt von Gregor:
    **
    Dummerweise mache ich meistens etwas mit Bildern, wenn ich programmiere. Die meisten Algorithmen, die ich schreibe, verarbeiten Bilder. Das heißt, dass die Daten, die ich verarbeite, normalerweise so komplex sind, dass ich nicht einfach nachprüfen kann, ob richtig gerechnet wurde... Die einfachste Möglichkeit, herauszufinden, ob ein Algorithmus bei mir richtig gearbeitet hat, ist sich das Bild am Schluss anzugucken. ...**

    Stimmt, ist eine andere Anforderrung, und
    da leuchtet mir das ein, das die Zahlen die
    der Debugger auspuckt da mehr oder weniger
    "nichtssagend" sind 🙂



  • Original erstellt von HolyFly:
    Stimmt, ist eine andere Anforderrung, und
    da leuchtet mir das ein, das die Zahlen die
    der Debugger auspuckt da mehr oder weniger
    "nichtssagend" sind 🙂

    Cool HolyFly dich gibts hier auch, kennst mich?



  • Klar 🙂

    kenn doch meine Pappenheimer.
    Klar, wenn ich woanders viel
    fragen beantworten soll, muss es
    doch auch eine Location geben
    wo ich viel Fragen fragen
    kann


Anmelden zum Antworten