java堆栈跟踪中的“未知源”,但行号在类文件中

我编写了一个超级简单的java类,它应该抛出exception。 但是我得到的堆栈跟踪看起来像这样:

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

注意:堆栈跟踪中没有行号,我希望有。

在搜索此问题时您找到的答案都是在编译时添加正确的参数,以确保行号实际上进入类文件。 但是,我不相信这是我的问题,因为我在我的ant build.xml中有这个问题

  

此外,根据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中设置一个参数?

谢谢!

我认为正确的方法是:

  

请注意, 行,变量,源之间没有空格

在另一个问题上找到了这个答案

这通常与缺少调试信息有关。 您可能正在使用JRE(而不是JDK),它不包含rt.jar类的调试信息。 尝试使用完整的JDK,您将在堆栈跟踪中获得适当的位置

我有完全相同的问题。 在我们的环境中,它有助于关闭optimize-flag:

  

显然Ant不会忽略属性优化,尽管Ant-Doc说属性“优化”(我们使用的是Java 1.7):

指示是否应使用优化编译源; 默认为关闭。 请注意,Sun的javac从JDK 1.3开始忽略了这个标志(因为编译时优化是不必要的)。