it-swarm.com.de

wie kann ich ein JAR zur Laufzeit debuggen?

Ich bin in einer ziemlich seltsamen Position (aus Sicht meines Java-Neulings):

  1. mit Eclipse habe ich ein "Java-Programm" (einige .Java-Dateien mit Klassen in) geschrieben, das im Wesentlichen (Batch) eine * .csv-Textdatei liest, deren Inhalt "auswertet" und die Ergebnisse in eine * _out.csv-Textdatei schreibt. Zum Auffinden der Eingabedatei wird eine "Dateiauswahl" verwendet (Beispiel siehe hier: http://docs.Oracle.com/javase/tutorial/uiswing/components/filechooser.html ).

  2. Ich habe den gesamten Code debuggt und mit dem Debugger es funktioniert .

  3. Ich habe den Code ausgeführt (die Hauptklasse, die alle anderen nacheinander aufruft) und es funktioniert , während in Eclipse.

  4. Ich habe den gesamten Projektinhalt in eine "ausführbare JAR" -Datei exportiert.

Beachten Sie, dass es sich, abgesehen von der Dateiauswahl, hauptsächlich um einen "Stapel" handelt, der liest und schreibt: fast keine Benutzeroberfläche. Während ich in Eclipse war, habe ich einige interne Ergebnisse gezeigt, indem ich etwas wie "if (debug) System.out.print (" something to print ");" verwendete, um "debug" auf TRUE zu setzen Debugging und FALSE in der Produktionsumgebung.

ALLE oben genannten haben funktioniert!

Nun, das runnable jar starten (Doppelklick auf der JAR-Datei, in Win/XP), ich sehe die Dateiauswahl, und ich kann es verwenden, aber nach der Eingabedatei wählen ... nichts: (mit keiner Benutzeroberfläche) ich weiß nicht, ob die Datei gelesen wurde, habe ich keine generierte Ausgabedatei sehen, und ich habe auch keine „Konsole“ zur Liste all Zwischen Debug-Meldung, um zu sehen, ob das Jar funktioniert, auch wenn ich es mit der auf TRUE gesetzten Debug-Variablen erneut exportiere.

Gibt es eine Möglichkeit, das laufende Jar "zur Laufzeit zu debuggen" (wie die MsgBox von VB oder etwas anderes)? eine Art "Protokolldatei", die ich "aktivieren" oder untersuchen kann? (Offensichtlich, wie mein Glas ist nicht das Ergebnis Datei zu schreiben, ich kann einfach nicht versuchen, einen * .log Schreiben auch) Ich habe auch nur ich zu sagen kann nicht install andere als Eclipse-auf meinem Rechner ( und hatte einfach Glück, dass es lief), also keine üblichen Entwicklerwerkzeuge, Dienstprogramme und andere nützliche Dinge.

33
eewing

Obwohl es sich um ein lauffähiges Jar handelt, können Sie es immer noch von einer Konsole aus ausführen. Öffnen Sie ein Terminalfenster, navigieren Sie zu dem Verzeichnis, in dem sich das Jar befindet, und geben Sie "Java -jar yourJar.jar" ein. Es wird in diesem Terminalfenster ausgeführt, und die Ausgabe von sysout und syserr wird dort angezeigt, einschließlich Stapelspuren von nicht erfassten Ausnahmen. Stellen Sie sicher, dass Ihr Debug beim Kompilieren auf true gesetzt ist. Und viel Glück.


Nur an etwas anderes gedacht - Wenn Sie Win7 verwenden, hat es oft Berechtigungsprobleme, wenn Benutzeranwendungen Dateien in bestimmte Verzeichnisse schreiben. Stellen Sie sicher, dass das Verzeichnis, in das Sie Ihre Ausgabedatei schreiben, eines ist, für das Sie Berechtigungen haben.

In einem zukünftigen Projekt können Sie, wenn es groß genug ist, eine der Standardprotokollierungsfunktionen für die Debug-Ausgabe verwenden. dann wird es leicht sein, sie in eine Datei umzuleiten, anstatt sich auf eine Konsole zu verlassen. Aber für einen kleineren Job wie diesen sollte dies in Ordnung sein.

14
arcy

http://www.eclipsezone.com/Eclipse/forums/t53459.html

Lass es grundsätzlich laufen mit:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044

Beim Start wartet die Anwendung, bis Sie eine Verbindung von einer anderen Quelle her herstellen.

80
RamonBoza

Sie können die Debugging-Funktion von JVM aktivieren, wenn Sie den Befehl Java mit einer speziellen Option starten:

Java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar

Starten Sie jar.jar wie in der Befehlszeile:

  • put this JVM-Instanz in der Rolle eines Servers (server=y), der Port 8000 überwacht (address=8000)
  • schreibe Listening for transport dt_socket at address: 8000 in stdout und
  • dann pausieren Sie die Anwendung (suspend=y), bis sich ein Debugger verbindet. Der Debugger fungiert in diesem Szenario als client .

Allgemeine Optionen für die Auswahl eines Debuggers sind:

  • Eclipse Debugger: Klicken Sie unter Run -> Debug Configurations ... -> auf Remote Java Application -> und klicken Sie auf die Schaltfläche New launch configuration . Geben Sie einen willkürlichen Name für diese Debug-Konfiguration an. Verbindungstyp: Standard (Socket Attach) und als Verbindungseigenschaften die Einträge Host: localhost , Port: 8000 . Übernehmen Sie die Änderungen und klicken Sie auf Debug . In dem Moment, in dem sich der Eclipse-Debugger erfolgreich mit der JVM verbunden hat, sollte jar.jar mit der Ausführung beginnen.
  • jdb Befehlszeilentool : Starten Sie es mit jdb -connect com.Sun.jdi.SocketAttach:port=8000
37
Abdull

Mit IntelliJ IDEA können Sie eine Jar Application-Laufzeitkonfiguration erstellen, die JAR, die Quellen, die JRE auswählen, um die Jar auszuführen, und mit dem Debuggen beginnen. Hier ist die Dokumentation.

1
BullyWiiPlaza