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

Unable to insert breakpoint Absent Line Number Information

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


当前回答

我的问题是我有2个JAR,我试图根据Eclipse中的Java Build Path => order & Export选项卡中的顺序覆盖另一个JAR,因为一个是用于调试的,另一个不是(调试JAR在顺序中是第一个)。当我这样做时,我必须手动附加一个源。

我尝试删除非调试JAR,并将调试JAR放在我的\WEB-INF\lib\目录中,进行清理、构建等操作,结果成功了。这一次(已经删除了附加的源代码),它将自动让我浏览调试代码,而无需手动附加任何源代码。断点和调试也可以工作。


为了防止有人仍然有问题,我也尝试了其他答案中提到的所有这些特解:

取消选中,应用并重新选中添加行号属性… 手动编辑org.eclipse.jdt.core.prefs,如另一个答案:https://stackoverflow.com/a/31588700/1599699中提到的 确保在启用调试的情况下生成JAR。 将JDK遵从级别从1.6更改为1.7(从而匹配我正在使用的JDK)。

我还做了通常的服务器关闭(并确保java.exe实际上是关闭的……),删除两个项目中的\build\目录,使用-clean参数重新启动Eclipse,重新创建调试JAR,刷新,清洗,并在其中构建带有调试JAR的项目,以调试模式启动服务器,发布/清洗,并设置断点。

其他回答

如果您确实指出了您正在使用的eclipse版本和技术(例如,Java JDT,或面向Java的AJDT,或c++ CDT),这将有所帮助。

在Java方面,我猜想您的“勾选编译器选项中的复选框”指的就是这个

在“窗口—>首选项—> Java—>编译器—>类文件生成”下,所有“类文件”生成选项都设置为True:

(1)添加可变属性, (2) addline number, (3)添加源文件名, (4)保存未使用的局部变量。

您的项目是否只在全局级别(windows Preferences)或在项目特定级别检查这些?

你确定打开的类(你试图在上面设置断点):

是您的源代码之一(并且不是来自第三方库) 是。java,而不是。class?

尝试清理所有内容并重新构建所有内容,检查潜在的jar冲突。

当我用@ManagedBean (javax.annotation.ManagedBean)注释类时,我发现了这个问题。在JBoss EAP 6.2.0上运行新编译的应用程序时出现警告消息。忽略它并继续运行并没有帮助——断点从未到达。

我在JSF页面中使用EL调用该bean。现在…@ManagedBean可能不适合(我是CDI的新手)。当我将注释更改为@Model时,bean执行了,但断点警告也消失了,我像预期的那样击中了断点。

总之,看起来@ManagedBean注释弄乱了行号,不管它是否使用了错误的注释。

在eclipse菜单中,进入“窗口->首选项->Java->编译器” 取消标记复选框“添加行号属性…” 单击“应用”->是 标记复选框“添加行号属性…” 再次申请。 愉快调试

有一次我在使用junit和Mockito时遇到了同样的错误,我忘记为静态类添加@PrepareForTest。

添加以下代码修复了我的问题。

@PrepareForTest({XXXXX.class})

不确定是不是同一个案子。

我有同样的错误与JBoss 7.1.. 我和泽菲罗做了同样的事。只是忽略了错误,我能够正常放置断点。 在我的情况下,我正在构建思想蚂蚁生成器,这是我的javac任务:

<javac
        srcdir="${src.dir}"
        destdir="${build.classes.dir}" 
        includeantruntime="false" 
        debug="${debug}"
        verbose="false"
        debuglevel="lines,vars,source"
        source="1.6"
        target="1.6">

        <!-- Sppressing warning for setting an older source without bootclasspath
             (see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
        <compilerarg value="-Xlint:-options"/>

        <classpath>
            <fileset dir="${lib.dir}" includes="*.jar" />
            <fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
        </classpath>

    </javac>