[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Add new CLHSDB command to print all methods in CodeCache
From:       Yasumasa Suenaga <yasuenag () gmail ! com>
Date:       2017-01-03 2:18:54
Message-ID: c3360798-81d5-b57b-0220-c8da7705749a () gmail ! com
[Download RAW message or body]

Hi all,

I want to check what methods have been compiled in memory dump.
I know we can use dumpcodecache command in CLHSDB, but it is too long fot it because \
dumpcodecache prints contents (assembly code).

I want to add a command to CLHSDB to print all method name and signature in CodeCache \
as below. Is it accepted? If so, I will file it to JBS and will upload webrev.

-------------------------------------------
diff -r 8d23544aa002 src/jdk.hotspot.agent/doc/clhsdb.html
--- a/src/jdk.hotspot.agent/doc/clhsdb.html     Mon Jan 02 00:26:40 2017 -0800
+++ b/src/jdk.hotspot.agent/doc/clhsdb.html     Tue Jan 03 11:16:46 2017 +0900
@@ -46,6 +46,7 @@
    dumpcfg -a | id <font color="red">Dump the PhaseCFG for every compiler thread \
that has one live</font>  dumpclass { address | name } [ directory ] <font \
color="red">dump .class file for given Klass* or class name</font>  dumpcodecache \
<font color="red">dump codecache contents</font> +  listcodecache <font \
color="red">list methods in codecache</font>  dumpheap [ file ] <font \
color="red">dump heap in hprof binary format</font>  dumpideal -a | id <font \
color="red">dump ideal graph like debug flag -XX:+PrintIdeal</font>  dumpilt -a | id \
                <font color="red">dump inline tree for C2 compilation</font>
diff -r 8d23544aa002 \
                src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java
                
--- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java Mon \
                Jan 02 00:26:40 2017 -0800
+++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/CommandProcessor.java Tue \
Jan 03 11:16:46 2017 +0900 @@ -1559,6 +1559,24 @@
                  }
              }
          },
+        new Command("listcodecache", "listcodecache", false) {
+            public void doit(Tokens t) {
+                if (t.countTokens() != 0) {
+                    usage();
+                } else {
+                    CodeCacheVisitor v = new CodeCacheVisitor() {
+                        public void prologue(Address start, Address end) {
+                        }
+                        public void visit(CodeBlob blob) {
+                            blob.printOn(out);
+                        }
+                        public void epilogue() {
+                        }
+                    };
+                    VM.getVM().getCodeCache().iterate(v);
+                }
+            }
+        },
          new Command("where", "where { -a | id }", false) {
              public void doit(Tokens t) {
                  if (t.countTokens() != 1) {
-------------------------------------------


Thanks,

Yasumasa


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic