Ответ 1
Я думаю, что правильный путь:
<javac debug="true" debuglevel="lines,vars,source"
Обратите внимание, что между строками, vars, source
нет пробелов,Я написал супер простой класс java, который бросает исключения, как следует. Однако трассировка стека, которую я получаю, выглядит следующим образом:
java.lang.RuntimeException: hello
at Main.go(Unknown Source)
at Main.main(Unknown Source)
Примечание: в трассировке стека нет номеров строк, и я бы хотел, чтобы они были.
Ответы, которые вы обнаружите, когда проблема с этой проблемой связана с добавлением правильных параметров во время компиляции, чтобы убедиться, что номера строк действительно попадают в файл класса. Тем не менее, я не считаю, что моя проблема, как у меня есть в моем ant build.xml
<javac
debug="true"
debuglevel="lines,vars,source"
includeAntRuntime="false"
classpathref="classpath.compile"
srcdir="${src.dir}"
destdir="${build.classes}" />
Кроме того, согласно javap, похоже, что номера строк сделали это:
$ 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
Итак, что дает? Есть ли параметр, который мне нужно установить в jvm, когда я запускаю код?
Спасибо!
Я думаю, что правильный путь:
<javac debug="true" debuglevel="lines,vars,source"
Обратите внимание, что между строками, vars, source
нет пробелов,Нашел этот ответ на еще один вопрос:
Обычно это связано с отсутствующей информацией об отладке. Вы возможно, используя JRE (не JDK), который не содержит отладочную информацию для классов rt.jar. Попробуйте использовать полный JDK, вы получите правильные места в трассировка стека
У меня была точно такая же проблема. В нашей среде это помогло отключить флаг оптимизации:
<javac optimize="off" ...
По-видимому, Ant оптимизирует атрибут не игнорировать, хотя Ant -Doc говорит для атрибута "оптимизировать" (и мы используем Java 1.7):
Указывает, должен ли источник компилироваться с оптимизацией; по умолчанию отключено. Обратите внимание, что этот флаг просто игнорируется Sun javac, начиная с JDK 1.3 (так как оптимизация времени компиляции не нужна).
<property name="srcdir" location="src/"/>
<property name="builddir" location="build/"/>
<target name="compile">
<exec executable="javac">
<arg value="${srcdir}/*" />
<arg value="-d" />
<arg value="${builddir}"/>
</exec>
</target>