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

$