Wrong filter predicate of visible locals in SA JSDB. Diff against jdk8/jdk8/hotspot. Screenshot http://dl.iteye.com/upload/picture/pic/111635/c03df4f1-8ee1-30aa-b15e-dd16ef695d2d.png (original) (raw)
$ jps
32046 Demo
32069 Jps
$ pgrep -u sajia java
32046
$ alias | grep clhsdb
alias clhsdb='java -classpath .:$JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB'
$ clhsdb
hsdb> attach 32046
Attaching to process 32046, please wait...
hsdb> threads
32067 Low Memory Detector
32066 C2 CompilerThread1
32065 C2 CompilerThread0
32064 Signal Dispatcher
32063 Finalizer
32062 Reference Handler
32047 main
hsdb> universe
Heap Parameters:
ParallelScavengeHeap [ PSYoungGen [ eden = [0x0000000758600000,0x0000000758883d80,0x00000007603c0000] , from = [0x00000007618b0000,0x00000007618b0000,0x0000000762da0000] , to = [0x00000007603c0000,0x00000007603c0000,0x00000007618b0000] ] PSOldGen [ [0x0000000609200000,0x0000000609200000,0x000000061e140000] ] PSPermGen [ [0x0000000604000000,0x000000060427d438,0x00000006054c0000] ] ]
hsdb> jseval "jvm"
Java Hotspot Server 64 bit VM (build 20.5-b03)
hsdb> jseval "jvm.threads"
[Thread (address=0x000000075862c7f0, name=Low Memory Detector), Thread (address=0x000000075862c6c0, name=C2 CompilerThread1), Thread (address=0x000000075862c590, name=C2 CompilerThread0), Thread (address=0x000000075862c460, name=Signal Dispatcher), Thread (address=0x0000000758601320, name=Finalizer), Thread (address=0x00000007586011e8, name=Reference Handler), Thread (address=0x0000000758600840, name=main)]
hsdb> jseval "jvm.threads[6].frames"
[Frame (method=java.io.FileInputStream.readBytes(byte[], int, int), bci=0, line=0), Frame (method=java.io.FileInputStream.read(byte[], int, int), bci=4, line=220), Frame (method=java.io.BufferedInputStream.fill(), bci=175, line=218), Frame (method=java.io.BufferedInputStream.read(), bci=12, line=237), Frame (method=Demo.main(java.lang.String[]), bci=3, line=5)]
hsdb> jseval "mainFrame = jvm.threads[6].frames[4]"
Frame (method=Demo.main(java.lang.String[]), bci=3, line=5)
hsdb> jseval "for (var p in mainFrame) println(p)"
bci
thisObject
locals
thread
line
method
hsdb> jseval "mainFrame.method"
Method Demo.main(java.lang.String[])
hsdb> jseval "mainFrame.locals"
{}
hsdb>
hsdb> jseval "sa.threads"
sun.jvm.hotspot.runtime.Threads@3f6dadf9
hsdb> jseval "sa.threads.first().next().next().next().next().next().next().getThreadName()"
main
hsdb> jseval "jt = sa.threads.first().next().next().next().next().next().next()"
sun.jvm.hotspot.runtime.JavaThread@0x0000000050401800
hsdb> jseval "jt.getLastJavaVFrameDbg()"
sun.jvm.hotspot.runtime.InterpretedVFrame@4486af30
hsdb> jseval "jt.getLastJavaVFrameDbg().javaSender().javaSender().javaSender().javaSender().getMethod().name.asString()"
main
hsdb> jseval "jvf = jt.getLastJavaVFrameDbg().javaSender().javaSender().javaSender().javaSender()"
sun.jvm.hotspot.runtime.InterpretedVFrame@44bb43fb
hsdb> jseval "jvf.locals"
sun.jvm.hotspot.runtime.StackValueCollection@5de9ac4
hsdb> jseval "jvf.locals.get(0).print(); println('')"
<0x0000000758633a00>
hsdb> inspect 0x0000000758633a00
instance of ObjArray @ 0x0000000758633a00 @ 0x0000000758633a00 (size = 24)
_mark: 1
0: "alpha" @ 0x0000000758633a30 Oop for java/lang/String @ 0x0000000758633a30
1: "beta" @ 0x0000000758633ae8 Oop for java/lang/String @ 0x0000000758633ae8
hsdb> whatis 0x0000000758633a00
Address 0x0000000758633a00: In unknown section of Java heap
hsdb> universe
Heap Parameters:
ParallelScavengeHeap [ PSYoungGen [ eden = [0x0000000758600000,0x0000000758883d80,0x00000007603c0000] , from = [0x00000007618b0000,0x00000007618b0000,0x0000000762da0000] , to = [0x00000007603c0000,0x00000007603c0000,0x00000007618b0000] ] PSOldGen [ [0x0000000609200000,0x0000000609200000,0x000000061e140000] ] PSPermGen [ [0x0000000604000000,0x000000060427d438,0x00000006054c0000] ] ]
hsdb> quit
$