2012-02-09 14 views
18

Escribí una clase java muy simple que arroja excepciones como debería. Sin embargo, el seguimiento de la pila que estoy recibiendo el siguiente aspecto:"Fuente desconocida" en la pila de Java, pero los números de línea están en el archivo de clase

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

Nota: no hay números de línea en el seguimiento de la pila y me gustaría que haya.

Las respuestas que se encuentran al buscar en Google este problema se basan en agregar los parámetros correctos en tiempo de compilación para asegurarse de que los números de línea realmente lleguen al archivo de clase. Sin embargo, no creo que mi problema es que tengo esto en mi hormiga build.xml

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

Además, según javap, parece que los números de línea lo logró en:

$ 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 

Entonces, ¿qué da? ¿Hay algún parámetro que deba establecer en el jvm cuando ejecuto el código?

Gracias!

+0

¿Está ejecutando el jvm en modo servidor, es decir, 'java -server'? Además, ¿te estás escapando de la instalación de jre o jdk? – shams

+0

no usa -server y estoy usando un jdk – andersonbd1

+0

Nunca me di cuenta de que esto podría establecerse en javac en Ant ... Me preguntaba por qué mis stacktraces se habían vuelto menos útiles últimamente. : P Cambió ahora y la vida es mejor – Panky

Respuesta

22

Creo que la forma correcta es:

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

cuenta que no hay espacios entre líneas , vars, fuente

+0

¿Los únicos diferentes vs verdaderos están activados? Si es así, lo intenté y no ayudó. Gracias, sin embargo. – andersonbd1

+1

puede publicar la etiqueta completa ? – bvanvelsen

+0

Prefiero depurar = en – lwpro2

2

consideran que esta respuesta en another question:

Esto está normalmente relacionado a la falta de información de depuración. Usted es probablemente usando JRE (no JDK), que no incluye información de depuración para las clases rt.jar. Intente utilizar JDK completo, obtendrá lugares adecuados en el seguimiento de pila

+0

Encontré esa nota también, pero no creo que se aplique a mí. # 1) Estoy usando jdk y # 2) Creo que eso solo importa porque los archivos de clase compilados para las clases de Java api ... sin embargo, esta es una clase personalizada mía – andersonbd1

+0

Anderson es correcta, el jdk solo llenaría en la información de depuración para componentes sdk. Además de eso _la jre no incluye un compilador_. Creo que quizás no deberías haber publicado esto. –

1

Tuve exactamente el mismo problema. En nuestro entorno que ayudó a apagar el optimizan la bandera:

<javac optimize="off" ... 

Al parecer hormiga hace no ignorar atribuir optimizar, aunque Ant-Doc dice del atributo "optimizar" (y estamos utilizando Java 1.7):

Indica si la fuente debe compilarse con optimización; se desactiva por defecto Tenga en cuenta que este indicador solo es ignorado por el javac de Sun que comienza con JDK 1.3 (ya que la optimización en tiempo de compilación no es necesaria).

Cuestiones relacionadas