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

2022-09-01 23:25:54

我写了一个超级简单的java类,它正在抛出异常。但是,我得到的堆栈跟踪如下所示:

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

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

在谷歌搜索这个问题时,你找到的答案都是关于在编译时添加正确的参数,以确保行号实际上进入了类文件。但是,我不认为这是我的问题,因为我的蚂蚁体型中有这个.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 中设置参数?

谢谢!


答案 1

我认为正确的方法是:

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

注意行之间没有空格,vars,source


答案 2

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

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


推荐