author | minqi |
Mon, 12 Nov 2012 14:03:53 -0800 | |
changeset 14477 | 95e66ea71f71 |
parent 13728 | 882756847a04 |
child 17123 | a8e62eed2e3e |
permissions | -rw-r--r-- |
1 | 1 |
<html> |
2 |
<head> |
|
3 |
<title> |
|
4 |
Command line HSDB |
|
5 |
</title> |
|
6 |
</head> |
|
7 |
<body> |
|
8 |
||
9 |
<h1>Command line HSDB</h1> |
|
10 |
<p> |
|
11 |
When debugging remote core dumps it is easier to work with command line tools instead of |
|
12 |
GUI tools. Command line HSDB (CLHSDB) tool is alternative to SA GUI tool HSDB. |
|
13 |
</p> |
|
14 |
||
15 |
<p> |
|
16 |
There is also JavaScript based SA command line interface called <a href="jsdb.html">jsdb</a>. |
|
17 |
But, CLHSDB supports Unix shell-like (or dbx/gdb-like) command line interface with |
|
18 |
support for output redirection/appending (familiar >, >>), command history and so on. |
|
19 |
Each CLHSDB command can have zero or more arguments and optionally end with output redirection |
|
20 |
(or append) to a file. Commands may be stored in a file and run using <b>source</b> command. |
|
21 |
<b>help</b> command prints usage message for all supported commands (or a specific command) |
|
22 |
</p> |
|
23 |
||
24 |
<h3>Shell/batch scripts to run command line HSDB</h3> |
|
25 |
||
26 |
<ul> |
|
27 |
<li>clhsdbproc.sh |
|
28 |
<li>clhsdbproc64.sh |
|
29 |
<li>clhsdbwindbg.bat |
|
30 |
<li>clhsdbwindbg64.bat |
|
31 |
</ul> |
|
32 |
||
33 |
<h3>Annotated output of CLHSDB help command</h3> |
|
34 |
||
35 |
<pre> |
|
36 |
<code> |
|
37 |
Available commands: |
|
38 |
assert true | false <font color="red">turn on/off asserts in SA code</font> |
|
39 |
attach pid | exec core <font color="red">attach SA to a process or core</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
40 |
buildreplayjars [all | boot | app] <font color="red">build jars for replay, boot.jar for bootclasses, app.jar for application classes</font> |
1 | 41 |
class name <font color="red">find a Java class from debuggee and print oop</font> |
13728
882756847a04
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
1
diff
changeset
|
42 |
classes <font color="red">print all loaded Java classes with Klass*</font> |
1 | 43 |
detach <font color="red">detach SA from current target</font> |
44 |
dis address [ length ] <font color="red">disassemble (sparc/x86) specified number of instructions from given address</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
45 |
dissemble address <font color="red">disassemble nmethod</font> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
46 |
dumpcfg -a | id <font color="red">Dump the PhaseCFG for every compiler thread that has one live</font> |
13728
882756847a04
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
1
diff
changeset
|
47 |
dumpclass { address | name } [ directory ] <font color="red">dump .class file for given Klass* or class name</font> |
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
48 |
dumpcodecache <font color="red">dump codecache contents</font> |
1 | 49 |
dumpheap [ file ] <font color="red">dump heap in hprof binary format</font> |
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
50 |
dumpideal -a | id <font color="red">dump ideal graph like debug flag -XX:+PrintIdeal</font> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
51 |
dumpilt -a | id <font color="red">dump inline tree for C2 compilation</font> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
52 |
dumpreplaydata <address> | -a | <thread_id> [>replay.txt] <font color="red">dump replay data into a file</font> |
1 | 53 |
echo [ true | false ] <font color="red">turn on/off command echo mode</font> |
54 |
examine [ address/count ] | [ address,address] <font color="red">show contents of memory from given address</font> |
|
55 |
field [ type [ name fieldtype isStatic offset address ] ] <font color="red">print info about a field of HotSpot type</font> |
|
56 |
findpc address <font color="red">print info. about pointer location</font> |
|
57 |
flags [ flag ] <font color="red">show all -XX flag name value pairs. or just show given flag</font> |
|
58 |
help [ command ] <font color="red">print help message for all commands or just given command</font> |
|
59 |
history <font color="red">show command history. usual !command-number syntax works.</font> |
|
60 |
inspect expression <font color="red">inspect a given oop</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
61 |
intConstant [ name [ value ] ] <font color="red">print out hotspot integer constant(s)</font> |
13728
882756847a04
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
1
diff
changeset
|
62 |
jdis address <font color="red">show bytecode disassembly of a given Method*</font> |
1 | 63 |
jhisto <font color="red">show Java heap histogram</font> |
64 |
jseval script <font color="red">evaluate a given string as JavaScript code</font> |
|
65 |
jsload file <font color="red">load and evaluate a JavaScript file</font> |
|
66 |
jstack [-v] <font color="red">show Java stack trace of all Java threads. -v is verbose mode</font> |
|
67 |
livenmethods <font color="red">show all live nmethods</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
68 |
longConstant [ name [ value ] ] <font color="red">print out hotspot long constant(s)s</font> |
1 | 69 |
mem address [ length ] <font color="red">show contents of memory -- also shows closest ELF/COFF symbol if found</font> |
70 |
pmap <font color="red">show Solaris pmap-like output</font> |
|
13728
882756847a04
6964458: Reimplement class meta-data storage to use native memory
coleenp
parents:
1
diff
changeset
|
71 |
print expression <font color="red">print given Klass*, Method* or arbitrary address</font> |
1 | 72 |
printas type expression <font color="red">print given address as given HotSpot type. eg. print JavaThread <address></font> |
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
73 |
printmdo -a | expression <font color="red">print method data oop</font> |
1 | 74 |
printstatics [ type ] <font color="red">print static fields of given HotSpot type (or all types if none specified)</font> |
75 |
pstack [-v] <font color="red">show mixed mode stack trace for all Java, non-Java threads. -v is verbose mode</font> |
|
76 |
quit <font color="red">quit CLHSDB tool</font> |
|
77 |
reattach <font color="red">detach and re-attach SA to current target</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
78 |
revptrs <font color="red">find liveness of oops</font> |
1 | 79 |
scanoops start end [ type ] <font color="red">scan a Oop from given start to end address</font> |
80 |
search [ heap | codecache | threads ] value <font color="red">search a value in heap or codecache or threads</font> |
|
81 |
source filename <font color="red">load and execute CLHSDB commands from given file</font> |
|
82 |
symbol name <font color="red">show address of a given ELF/COFF symbol</font> |
|
83 |
sysprops <font color="red">show all Java System properties</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
84 |
thread id <font color="red">show thread of id</font> |
1 | 85 |
threads <font color="red">show all Java threads</font> |
86 |
tokenize ... |
|
87 |
type [ type [ name super isOop isInteger isUnsigned size ] ] <font color="red">show info. on HotSpot type</font> |
|
88 |
universe <font color="red">print gc universe</font> |
|
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
89 |
vmstructsdump <font color="red">dump hotspot type library in text</font> |
1 | 90 |
verbose true | false <font color="red">turn on/off verbose mode</font> |
91 |
versioncheck [ true | false ] <font color="red">turn on/off debuggee VM version check</font> |
|
92 |
whatis address <font color="red">print info about any arbitrary address</font> |
|
93 |
where { -a | id } <font color="red">print Java stack trace of given Java thread or all Java threads (-a)</font> |
|
94 |
</code> |
|
95 |
</pre> |
|
96 |
||
97 |
<h3>JavaScript integration</h3> |
|
98 |
||
99 |
<p>Few CLHSDB commands are already implemented in JavaScript. It is possible to extend CLHSDB command set |
|
100 |
by implementing more commands in a JavaScript file and by loading it by <b>jsload</b> command. <b>jseval</b> |
|
101 |
command may be used to evaluate arbitrary JavaScript expression from a string. Any JavaScript function |
|
102 |
may be exposed as a CLHSDB command by registering it using JavaScript <b><code>registerCommand</code></b> |
|
103 |
function. This function accepts command name, usage and name of the JavaScript implementation function |
|
104 |
as arguments. |
|
105 |
</p> |
|
106 |
||
107 |
<h3>Simple CLHSDB command implemented in JavaScript</h3> |
|
108 |
||
109 |
<b>File: test.js</b> |
|
110 |
<pre> |
|
111 |
<code> |
|
112 |
function helloImpl(name) { |
|
113 |
println("hello, " + name); |
|
114 |
} |
|
115 |
||
116 |
// register the above JavaScript function as CLHSDB command |
|
117 |
registerCommand("hello", "hello name", "helloImpl"); |
|
118 |
</code> |
|
119 |
</pre> |
|
120 |
---------<br> |
|
121 |
||
122 |
"test.js" can be loaded in CLHSDB prompt using <b>jsload</b> command using |
|
123 |
||
124 |
<pre> |
|
125 |
<code> |
|
126 |
hsdb> jsload test.js |
|
127 |
</code> |
|
128 |
</pre> |
|
129 |
||
14477
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
130 |
<h3>C2 Compilation Replay</h3> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
131 |
<p> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
132 |
When a java process crashes in compiled method, usually a core file is saved. |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
133 |
The C2 replay function can reproduce the compiling process in the core. |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
134 |
<a href="c2replay.html">c2replay.html</a> |
95e66ea71f71
6830717: replay of compilations would help with debugging
minqi
parents:
13728
diff
changeset
|
135 |
|
1 | 136 |
</body> |
137 |
</html> |