2010-08-06 7 views
12

In der Java Debugger Interface-Dokumentation für die Location class gibt es einen Absatz, der die "Stratum" des Standortes diskutiert. Ich habe mich ein wenig genauer angesehen, um herauszufinden, wie man eine neue Schicht (etwa für Scala oder JRuby) implementieren würde, aber ich habe nicht viel gefunden. Kann jemand das Thema beleuchten?Implementieren Sie verschiedene Stratum für Java-Debugger-Schnittstelle

+1

Haben Sie sich die Spezifikation für JSR-45 (Debugging-Unterstützung für andere Sprachen) angesehen? http://jcp.org/en/jsr/detail?id=45 – kschneid

+0

Ich hatte nicht, nein. Danke für den Zeiger, das hilft ein bisschen. – jfager

+0

Ich erinnere mich vage daran, dass die Klassendatei ein Attribut hat, das auf die Quelldatei verweist - haben Sie versucht, das auf eine Datei in einer anderen Sprache zu setzen? – Ramon

Antwort

3

Schichten wären für Scala oder JRuby nicht wirklich geeignet, da sie direkt in Bytecodes kompiliert werden, sodass die Attribute SourceFile und LineNumberTable ausreichen. Schichten sind für Dinge wie JSP gedacht, die in eine Java-Quelldatei übersetzt und kompiliert werden. Die Schichten werden durch eine Quellkarte (SMAP) definiert, die in einem SourceDebugExtension-Attribut gespeichert ist. Die Details, wie das alles funktioniert, sind Teil von JSR-45. Ein anderes Beispiel wäre das State Machine Compiler, obwohl ich nicht glaube, dass es ein SMAP erzeugt. Ich bin mir auch nicht sicher, ob Javac eine Option zum Einbetten des SMAP in die Klassendatei hat. Sie würden dann ein separates Werkzeug dafür benötigen.

+0

Tatsächlich sind Zeilennummern für die Bytecode-Adresse -> Quellpositionszuordnung für Scala-Code nicht genau genug. Eine gegebene Zeile von Scala-Code kann leicht viele sinnvolle Breakpoints ergeben, aber aktuelle Debugger können ihre Quellposition innerhalb einer solchen Zeile nicht auflösen. –

Verwandte Themen