小编Mat*_*osa的帖子

在 java 编译器中标记行时出现问题

我是一名硕士生,正在研究静态分析。在我的一项测试中,我遇到了在 java 编译器中标记行的问题。

我有以下java代码:

 226:   String json = "/org/elasticsearch/index/analysis/commongrams/commongrams_query_mode.json";
 227:   Settings settings = Settings.settingsBuilder()
 228:           .loadFromStream(json, getClass().getResourceAsStream(json))
 229:           .put("path.home", createHome())
 230:           .build();
Run Code Online (Sandbox Code Playgroud)

编译此代码并执行命令时javap -p -v CLASSNAME,我得到一个表,其中包含字节码中每条指令的源代码的相应行。

见下图:

字节码表

问题在于,在对该.put (" path.home ", createHome ())方法的调用中,字节码基本上生成四个指令:

19: anewarray  
24: ldc - String path.home
30: invokespecial - createHome
34: invokevirtual - put

Run Code Online (Sandbox Code Playgroud)

前两行标记为第 228 行(错误),后两行标记为第 229 行(正确)。

见下图:

字节码表

这是该方法的原始实现.put("path.home", createHome())

     public Builder put(Object... settings) {
        if (settings.length == 1) {
            // support cases where the actual …
Run Code Online (Sandbox Code Playgroud)

java bytecode javac javap

4
推荐指数
1
解决办法
187
查看次数

标签 统计

bytecode ×1

java ×1

javac ×1

javap ×1