2010-08-06 9 views
12

Nella documentazione dell'interfaccia di debugger Java per lo Location class, c'è un paragrafo che parla dello "strato" della posizione. Mi sono guardato un po 'per ulteriori dettagli su come si sarebbe implementato un nuovo strato (per esempio Scala o JRuby), ma non ho trovato molto. Qualcuno può far luce sull'argomento?Implementare uno strato diverso per l'interfaccia di debugger Java

+1

Hai esaminato le specifiche per JSR-45 (Supporto per il debug di altre lingue)? http://jcp.org/en/jsr/detail?id=45 – kschneid

+0

Non l'avevo, no. Grazie per il puntatore, questo aiuta un bel po '. – jfager

+0

Ricordo vagamente che il file di classe ha un attributo che punta al file sorgente - hai provato a impostarlo su un file in un'altra lingua? – Ramon

risposta

3

Strata non sarebbe realmente appropriato per Scala o JRuby poiché sono compilati direttamente in bytecode in modo che gli attributi SourceFile e LineNumberTable siano sufficienti. Gli strati sono pensati per cose come JSP che sono tradotte in un file sorgente Java e compilate. Gli strati sono definiti da una mappa di origine (SMAP) memorizzata in un attributo SourceDebugExtension. I dettagli di come funziona tutto questo fanno parte di JSR-45. Un altro esempio potrebbe essere il State Machine Compiler anche se non credo crei uno SMAP. Non sono nemmeno sicuro se javac abbia un'opzione per incorporare lo SMAP nel file di classe. Avresti quindi bisogno di uno strumento separato per quello.

+0

Infatti, i numeri di riga non sono sufficientemente precisi per l'indirizzo bytecode -> mappatura della posizione sorgente per il codice Scala. Una data riga di codice Scala può facilmente generare molti breakpoint significativi, ma i debugger attuali non possono risolvere la loro posizione di origine all'interno di tale linea. –