Mercurial > hg > graal-jvmci-8
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 |
rev | line source |
---|---|
0 | 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> | |
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 | 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 | 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> | |
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 | 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 | 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> | |
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 | 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> | |
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 | 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> | |
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 | 72 printas type expression <font color="red">print given address as given HotSpot type. eg. print JavaThread <address></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 | 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> | |
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 | 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> | |
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 | 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> | |
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 | 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 | |
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 | 136 </body> |
137 </html> |