Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8292699

Improve printing of classes in native debugger

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Fixed
    • Icon: P4 P4
    • 20
    • None
    • hotspot
    • None
    • b21

      Current in gdb, you can print information about a class or method with something like

      call ((InstanceKlass*)0x00000008000411b8)->print_on(tty)
      call ((Method*)0x00007fffb4000d08)->print_codes_on(tty)

      However, it's difficult to find a class or method by its name and print out its contents.

      This RFE adds 3 new functions in debug.cpp so you can easily find classes/methods and print out their contents:

      - findclass(): class name only
      - findmethod(): class name and method name
      - findmethod2(): class name and method name/signature

      Here are some examples:

      (gdb) call findclass("java/lang/Object", 0)
      [0] 0x00000008000411b8 java.lang.Object, loader data: 0x00007ffff0130d10 of 'bootstrap'

      (gdb) call findclass("java/lang/Object", 1)
      [0] 0x00000008000411b8 java.lang.Object, loader data: 0x00007ffff0130d10 of 'bootstrap'
      0x00007fffb4000658 <init> : ()V
      0x00007fffb40010f0 finalize : ()V
      0x00007fffb4000f00 wait0 : (J)V
      0x00007fffb40008e8 equals : (Ljava/lang/Object;)Z
      0x00007fffb4000aa0 toString : ()Ljava/lang/String;
      0x00007fffb40007f0 hashCode : ()I
      0x00007fffb4000720 getClass : ()Ljava/lang/Class;
      0x00007fffb40009a0 clone : ()Ljava/lang/Object;
      0x00007fffb4000b50 notify : ()V
      0x00007fffb4000c20 notifyAll : ()V
      0x00007fffb4000e50 wait : (J)V
      0x00007fffb4001028 wait : (JI)V
      0x00007fffb4000d08 wait : ()V

      (gdb) call findclass("*ClassLoader", 0)
      [0] 0x000000080007de40 jdk.internal.loader.ClassLoaders$BootClassLoader, loader data: 0x00007ffff0130d10 of 'bootstrap'
      [1] 0x0000000800053c58 jdk.internal.loader.ClassLoaders$PlatformClassLoader, loader data: 0x00007ffff0130d10 of 'bootstrap'
      [2] 0x0000000800053918 jdk.internal.loader.ClassLoaders$AppClassLoader, loader data: 0x00007ffff0130d10 of 'bootstrap'
      [....]

      (gdb) call findmethod2("*ang/Object*", "wait", "()V", 0x7)
      [0] 0x00000008000411b8 java.lang.Object, loader data: 0x00007ffff0130d10 of 'bootstrap'
      0x00007fffb4000d08 wait : ()V
      0x00007fffb4000ce8 0 fast_aload_0
      0x00007fffb4000ce9 1 lconst_0
      0x00007fffb4000cea 2 invokevirtual 38 <java/lang/Object.wait(J)V>
      0x00007fffb4000ced 5 return

            iklam Ioi Lam
            iklam Ioi Lam
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: