Подтвердить что ты не робот

"Неизвестный источник" в трассе java стека, но номера строк находятся в файле класса

Я написал супер простой класс 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, когда я запускаю код?

Спасибо!

4b9b3361

Ответ 1

Я думаю, что правильный путь:

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

Обратите внимание, что между строками, vars, source

нет пробелов,

Ответ 2

Нашел этот ответ на еще один вопрос:

Обычно это связано с отсутствующей информацией об отладке. Вы возможно, используя JRE (не JDK), который не содержит отладочную информацию для классов rt.jar. Попробуйте использовать полный JDK, вы получите правильные места в трассировка стека

Ответ 3

У меня была точно такая же проблема. В нашей среде это помогло отключить флаг оптимизации:

<javac optimize="off" ...

По-видимому, Ant оптимизирует атрибут не игнорировать, хотя Ant -Doc говорит для атрибута "оптимизировать" (и мы используем Java 1.7):

Указывает, должен ли источник компилироваться с оптимизацией; по умолчанию отключено. Обратите внимание, что этот флаг просто игнорируется Sun javac, начиная с JDK 1.3 (так как оптимизация времени компиляции не нужна).

Ответ 4

<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>