在尝试设置断点时,我在Eclipse中得到这个奇怪的错误。

Unable to insert breakpoint Absent Line Number Information

我勾选了编译器选项的复选框,但运气不好。


当前回答

对于使用Tomcat服务器的Web项目,我通过以下步骤解决了这个问题。

打开窗口->显示视图->其他->服务器。 双击运行中的tomcat服务器。(打开tomcat服务器概述) 现在点击启动配置链接。 单击sources选项卡。 单击Add。 选择java项目 将显示您的所有项目。 选择打开“您要调试。” 保存配置并重新启动或构建应用程序。

其他回答

我在一个特定的项目中遇到了同样的问题,我一直试图重置窗口中的行号属性->首选项…然后我意识到每个项目都有自己的行号属性设置。右键单击项目,进入属性,选择JavaCompiler,并选中“添加行号属性…”

在编译/构建jar时,我做了上面列出的所有事情-仍然有同样的问题。

最终,在启动服务器时,下面列出的jvmarg更改最终为我工作:

删除/注释了一堆与javaagent和bootclasspath相关的jvm参数。

<!-- jvmarg value=“${agentfile}” /-->

< !贾维德- lib /雷丁——>

<!-- jvmarg value=“-Xbootclasspath/a:/foo /-->

打开/取消注释以下行:

<jvmarg value= -Xdebug />

然后,当我启动服务器时,我就可以到达断点了。我怀疑javaagent在某种程度上干扰了Eclipse检测行号的能力。

对于Spring相关的问题,考虑在某些情况下它生成的类“没有行号”;例如,一个没有接口的@Service注释类,添加接口就可以调试了。请参见这里的完整示例。

@Service("SkillService")
public class TestServiceWithoutInterface {
   public void doSomething() {
      System.out.println("Hello TestServiceWithoutInterface");
   }
}

上面的服务将有一个由spring生成的接口,导致“缺少行号”。添加一个真实的界面解决了生成问题:

public interface TestService {
    void doSomething();
}

@Service("SkillService")
public class TestServiceImpl implements TestService {
   public void doSomething() {
      System.out.println("Hello TestServiceImpl");
   }
}

我在Eclipse 3.4.1中有相同的错误消息,SUN JVM1.6.0_07连接到Tomcat 6.0(在另一台机器上以调试模式运行,SUN JVM1.6.0_16,调试连接正常工作)。

窗口——>首选项——> Java——>编译器——>类文件生成:“添加行号属性生成类文件”被选中。我做了一个干净的重新编译。我取消检查,重新编译,检查,重新编译。我确保项目使用了全局设置。还是一样的信息。

我切换到蚂蚁构建,使用

<javac srcdir="./src/java" destdir="./bin" debug="true">

同样的信息。

我不知道是什么导致了这条消息,为什么它不会消失。尽管这似乎与正在运行的Tomcat调试会话有关:当断开连接时,重新编译可以解决问题。但是在将调试器连接到Tomcat或在连接的调试会话期间设置新的断点时,它又会出现。

然而,事实证明消息是错误的:我确实能够在调试之前和调试期间调试和设置断点(javap -l也显示了行号)。所以请忽略它:)

在使用Spring Tool Suite (STS)启动Java EE项目时,我们也会遇到这个消息,但是我们可以忽略这个消息,因为一切都很好。