2012-02-09 9 views
18

Ho scritto una classe java super semplice che genera eccezioni come dovrebbe. Tuttavia l'analisi dello stack Sto diventando simile a questa:"Origine sconosciuta" nella traccia dello stack java, tuttavia i numeri di riga sono nel file di classe

java.lang.RuntimeException: hello 
     at Main.go(Unknown Source) 
     at Main.main(Unknown Source) 

Nota: non ci sono i numeri di riga nella traccia dello stack e vorrei che ci sia.

Le risposte che si trovano quando si cerca su Google questo problema riguardano l'aggiunta dei parametri corretti al momento della compilazione per assicurarsi che i numeri di riga siano effettivamente nel file di classe. Tuttavia, non credo che il mio problema, come ho questo nel mio build.xml formica

<javac 
    debug="true" 
    debuglevel="lines,vars,source" 
    includeAntRuntime="false" 
    classpathref="classpath.compile" 
    srcdir="${src.dir}" 
    destdir="${build.classes}" /> 

Inoltre, secondo javap, sembra che i numeri di riga ha fatto in:

$ javap -l ./build/classes/Main | head -n 9 
public class Main extends java.lang.Object{ 

public Main(); 
    LineNumberTable: 
    line 14: 0 
    line 22: 4 
    line 23: 15 
    line 24: 26 

Quindi cosa dà? C'è un parametro che devo impostare in jvm quando eseguo il codice?

Grazie!

+0

Si sta eseguendo la jvm in modalità server, ad esempio 'java -server'? Inoltre, stai scappando da jre o da un'installazione jdk? – shams

+0

non usando -server e sto usando un jdk – andersonbd1

+0

Non ho mai capito che questo potrebbe essere impostato in javac in Ant ... Mi chiedevo perché i miei stacktraces si fossero rivelati meno utili ultimamente. : P Cambiato ora e la vita è migliore – Panky

risposta

22

Penso che il modo corretto è:

<javac debug="true" debuglevel="lines,vars,source" 

Nota non ci sono spazi tra le linee , Vars, fonte

+0

L'unico vero vs vero? Se è così, l'ho provato e non è stato d'aiuto. Grazie comunque. – andersonbd1

+1

puoi pubblicare l'intero tag ? – bvanvelsen

+0

Preferisco il debug = on – lwpro2

2

trovato questa risposta su another question:

Questo è normalmente legato alla mancanza di informazioni di debug. Si è probabilmente utilizzando JRE (non JDK), che non include le informazioni di debug per le classi rt.jar. Provate ad usare pieno JDK, si otterrà posizioni corrette in la traccia dello stack

+0

Ho trovato anche quella nota, ma non penso si applichi a me. # 1) Sto usando un jdk e # 2) Penso che sia importante solo perché i file di classe compilati per le classi java api ... tuttavia, questa è una mia classe personalizzata – andersonbd1

+0

Anderson è corretta, il jdk riempirebbe solo in informazioni di debug per i componenti sdk. In cima al quale _the jre non include un compilatore_. Penso che forse non avresti dovuto postare questo. –

1

Ho avuto esattamente lo stesso problema. Nel nostro ambiente ha contribuito a spegnere l'optimize-bandiera:

<javac optimize="off" ... 

Apparentemente Ant fa non ignorare attribuire ottimizzare, anche se Ant-Doc dice per l'attributo "ottimizzare" (e che stiamo usando Java 1.7):

Indica se la sorgente deve essere compilata con l'ottimizzazione; predefinito su off. Nota che questo flag è appena ignorato dal javac di Sun che inizia con JDK 1.3 (poiché l'ottimizzazione in fase di compilazione non è necessaria).

Problemi correlati