annotate agent/doc/clhsdb.html @ 6972:bd7a7ce2e264

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