javap是否可以显示原始源代码行与objdump-S之类的字节码混合



我知道编译时该调试信息包含在.class文件中带有:

javac -g Main.java

并且可以从的CCD_ 1部分手动观察

javap -c -constants -private -verbose '$<' > '$@'

我想要的是使javap在字节码的中间显示源代码。

样本输入:

public class New {
    public static void main(String[] args) {
        System.out.println(new Integer(1));
    }
}

实际javap输出:

   0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
   3: new           #3                  // class java/lang/Integer
   6: dup
   7: iconst_1
   8: invokespecial #4                  // Method java/lang/Integer."<init>":(I)V
  11: invokevirtual #5                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
  14: return
LineNumberTable:
  line 3: 0
  line 4: 14

所需的javap输出:

       System.out.println(new Integer(1));
   0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
   3: new           #3                  // class java/lang/Integer
   6: dup
   7: iconst_1
   8: invokespecial #4                  // Method java/lang/Integer."<init>":(I)V
  11: invokevirtual #5                  // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
    }
  14: return
LineNumberTable:
  line 3: 0
  line 4: 14

这将使解释javap输出更加容易。

类似但更通用的问题:如何使用javap来查看哪些字节码行对应于Java代码中的行?

我试过:

  • 在以下位置创建功能请求:http://bugreport.java.com/submit_intro.do
  • 向邮件列表发送电子邮件:jdk9-dev@openjdk.java.net

但没有回复,我的信息甚至没有出现在那些网站上。不是一个非常开放的项目。

我不认为javap支持这个用例,但在过去的几天里,我一直在尝试一些类文件解析代码,到今天为止,它能够将源代码与汇编代码混合在一起。看见https://github.com/gagern/classfile了解详细信息和源代码。

相关内容

  • 没有找到相关文章

最新更新