无法进入java源代码。 "进入"某种程度上表现得像"跨过"

时间:2017-06-26 05:51:18

标签: java eclipse debugging

我试图研究java String类中的方法是如何工作的,所以我创建了一些调用String类方法的自定义代码。

正如您所看到的,我在自己的代码中设置了一个断点,并在java String类源代码中设置了另一个断点。

虽然我处于调试模式且位于代码的第7行,但我按了step into

然而,不是踩到String类方法indexOf,而是转移到我的代码的第8行。

为什么会这样?我该如何进入java字符串方法源代码?

enter image description here

public class TestingIndexOfMethod {
    public static void main(String[] args) {
        final String stringToBeSearchedThrough = "hello world";
        final String substringToLookFor = "ll";
        int a = stringToBeSearchedThrough.indexOf(substringToLookFor, 0);
        System.out.println(a);
    }
}

修改1:

我已经检查过,如果"使用步骤过滤器"在SO上询问此问题之前已激活,并且未激活。所以我不认为"使用步骤过滤器"这是问题所在。

enter image description here

编辑2:

step into适用于我自己定义的方法

1 个答案:

答案 0 :(得分:2)

很可能有一个步骤过滤器指示调试器跳过某些类。

在首选项对话框(菜单窗口 - >首选项)中,检查步骤过滤设置。

停用Use Step Fitlers停用所有步骤过滤器,或停用仅为java.*类的过滤器。

Eclipse step filtering

编辑另一个原因可能是您的项目正在使用JRE而不是JDK来执行。下面是使用Java 8 JRE和Java 8 JDK的示例。

使用 JRE

项目构建路径(注意jre1.8.0_112project runtime JRE

使用 JDK

项目构建路径(注意JavaSE-1.8project runtime JDK

编辑2 要确定使用的Java运行时库,请在代码中添加以下语句,然后以调试模式运行它。

...
public static void main(String[] args) {
    Stream.of(System.getProperty("sun.boot.class.path")
            .split(File.pathSeparator))
            .filter(s -> s.endsWith("rt.jar"))
            .forEach(System.out::println);
    ...