«Неизвестный источник» в трассировке стека Java, но номера строк находятся в файле класса - PullRequest
20 голосов
/ 09 февраля 2012

Я написал супер простой Java-класс, который генерирует исключения, как и должно быть. Однако трассировка стека, которую я получаю, выглядит так:

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

Примечание: в трассировке стека нет номеров строк, и я бы хотел, чтобы они были.

Ответы, которые вы найдете при поиске этой проблемы, все о добавлении правильных параметров во время компиляции, чтобы убедиться, что номера строк действительно попадают в файл класса. Тем не менее, я не верю, что это моя проблема, так как у меня есть это в моем муравье 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 при запуске кода?

Спасибо!

Ответы [ 3 ]

24 голосов
/ 09 февраля 2012

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

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

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

нет пробелов
2 голосов
/ 09 февраля 2012

Нашел ответ на другой вопрос :

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

1 голос
/ 30 октября 2015

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

<javac optimize="off" ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...