2016-09-17 2 views
1

Ich schreibe Skripte mit einer Java-API, die zu Klassendateien kompilieren und außerhalb meiner Perspektive auf einer virtuellen Maschine ausgeführt werden (ich habe keinen Zugriff auf diese virtuelle Maschine und kann meine Klassendateien nicht von innen heraus debuggen). Für diese Skripts sind beobachtbare Daten erforderlich, die ausgeführt werden und nicht ordnungsgemäß ausgeführt werden, sofern sie nicht innerhalb dieser virtuellen Maschine ausgeführt wurden. Aufgrund der Art und Weise, wie diese Klassendateien ausgeführt werden, kann ich sie meines Wissens nach nicht mit dem integrierten Debugger der IDE debuggen.Was macht java gerade?

Ich habe nicht wirklich das Programmiervokabular, um sogar nach Antworten auf diese letzte Aussage zu suchen, also korrigiere mich bitte, wenn ich falsch liege.

Wie auch immer, der einzige Weg, den ich bestimmt habe, erlaubt mir, diese Skripte zu debuggen, ist die klassische Druckanweisung-Methode. Es ist schrecklich. Aber es funktioniert. Und es scheint, dass die gesamte Gemeinschaft für die API diese Methode verwendet.

Ich hatte die Idee, dass ich Reflektion verwenden könnte, um Informationen aus meinen Klassen zu holen, während sie ausgeführt werden, aber dies gibt mir immer noch keinen Zugang zu dem von mir gesuchten zeilenweisen Debugging.

Was ich tun möchte ist, Schritt für Schritt die Ausführung meines Skripts zu überwachen (jede Berechnung der VM) und Informationen über diese Berechnungen zu speichern (Variable "foo" in Klasse "bar" wird 4 on line "soandso") als eine Art laufender Cache, der immer dann auf die Systemkonsole herunterlädt, wenn ein Fehler auftritt.

Ist das möglich?

+1

Sie sollten einen Logger in Betracht ziehen. Es ist wie print-Anweisungen, außer dass Sie Protokollierungsstufen (debug, info, warning, error) angeben können und dass Sie sowohl in eine Datei als auch in stdout (wie eine print-Anweisung) schreiben können. Wenn Sie Zugriff auf die virtuelle Maschine haben, können Sie auch die Protokolle herunterladen. – algrebe

+0

Welche IDE verwenden Sie, die Debugging nicht erlaubt? – Codebender

+1

Nicht sicher, ich folge der Frage, ist Java Remote-Debugging, was Sie tun müssen? Dies ist zumindest mit Eclipse machbar. – paisanco

Antwort

0

Sie können einen Blick auf dynamic proxies werfen.

Here ist eine sehr gute Erklärung dafür.

Mit einem dynamischen Proxy können Sie die Methode, die aufgerufen wird, und die Parameter, die an die Methode übergeben werden, ausgeben (protokollieren, als Mail senden, ...).

Es ist nicht genau das, was Sie suchen, aber vielleicht wird es Ihnen helfen.