Can javap show the original source code lines intermingled with the bytecode like objdump -S?

妖精的绣舞 提交于 2019-12-07 04:10:24

问题


I know this debug information is contained in the .class file when compiling with:

javac -g Main.java

and can be observed manually from the LineNumberTable: section of:

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

What I want is to make javap display the source in the middle of the bytecode.

Sample input:

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

Actual javap output:

   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

Desired javap output:

       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

That would make it much easier to interpret javap output.

Similar but more generic question: How to use javap to see what lines of bytecode correspond to lines in the Java code?

I have tried to:

  • create a feature request at: http://bugreport.java.com/submit_intro.do
  • send an email to the mailing list: jdk9-dev@openjdk.java.net

but there was no reply, and my messages don't even appear on those websites. Not a very open project.


回答1:


I don't think javap supports this use case, but I've been toying with some class file parsing code these past few days, and as of today it's capable of mixing source code with assembly code. See https://github.com/gagern/classfile for details and source code.



来源:https://stackoverflow.com/questions/31056219/can-javap-show-the-original-source-code-lines-intermingled-with-the-bytecode-lik

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!