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>
+ − 40
class name <font color="red">find a Java class from debuggee and print oop</font>
+ − 41
classes <font color="red">print all loaded Java classes with klassOop</font>
+ − 42
detach <font color="red">detach SA from current target</font>
+ − 43
dis address [ length ] <font color="red">disassemble (sparc/x86) specified number of instructions from given address</font>
+ − 44
dumpclass { address | name } [ directory ] <font color="red">dump .class file for given klassOop or class name</font>
+ − 45
dumpheap [ file ] <font color="red">dump heap in hprof binary format</font>
+ − 46
echo [ true | false ] <font color="red">turn on/off command echo mode</font>
+ − 47
examine [ address/count ] | [ address,address] <font color="red">show contents of memory from given address</font>
+ − 48
field [ type [ name fieldtype isStatic offset address ] ] <font color="red">print info about a field of HotSpot type</font>
+ − 49
findpc address <font color="red">print info. about pointer location</font>
+ − 50
flags [ flag ] <font color="red">show all -XX flag name value pairs. or just show given flag</font>
+ − 51
help [ command ] <font color="red">print help message for all commands or just given command</font>
+ − 52
history <font color="red">show command history. usual !command-number syntax works.</font>
+ − 53
inspect expression <font color="red">inspect a given oop</font>
+ − 54
jdis address <font color="red">show bytecode disassembly of a given methodOop</font>
+ − 55
jhisto <font color="red">show Java heap histogram</font>
+ − 56
jseval script <font color="red">evaluate a given string as JavaScript code</font>
+ − 57
jsload file <font color="red">load and evaluate a JavaScript file</font>
+ − 58
jstack [-v] <font color="red">show Java stack trace of all Java threads. -v is verbose mode</font>
+ − 59
livenmethods <font color="red">show all live nmethods</font>
+ − 60
mem address [ length ] <font color="red">show contents of memory -- also shows closest ELF/COFF symbol if found</font>
+ − 61
pmap <font color="red">show Solaris pmap-like output</font>
+ − 62
print expression <font color="red">print given klassOop, methodOop or arbitrary address</font>
+ − 63
printas type expression <font color="red">print given address as given HotSpot type. eg. print JavaThread <address></font>
+ − 64
printstatics [ type ] <font color="red">print static fields of given HotSpot type (or all types if none specified)</font>
+ − 65
pstack [-v] <font color="red">show mixed mode stack trace for all Java, non-Java threads. -v is verbose mode</font>
+ − 66
quit <font color="red">quit CLHSDB tool</font>
+ − 67
reattach <font color="red">detach and re-attach SA to current target</font>
+ − 68
scanoops start end [ type ] <font color="red">scan a Oop from given start to end address</font>
+ − 69
search [ heap | codecache | threads ] value <font color="red">search a value in heap or codecache or threads</font>
+ − 70
source filename <font color="red">load and execute CLHSDB commands from given file</font>
+ − 71
symbol name <font color="red">show address of a given ELF/COFF symbol</font>
+ − 72
sysprops <font color="red">show all Java System properties</font>
+ − 73
threads <font color="red">show all Java threads</font>
+ − 74
tokenize ...
+ − 75
type [ type [ name super isOop isInteger isUnsigned size ] ] <font color="red">show info. on HotSpot type</font>
+ − 76
universe <font color="red">print gc universe</font>
+ − 77
verbose true | false <font color="red">turn on/off verbose mode</font>
+ − 78
versioncheck [ true | false ] <font color="red">turn on/off debuggee VM version check</font>
+ − 79
whatis address <font color="red">print info about any arbitrary address</font>
+ − 80
where { -a | id } <font color="red">print Java stack trace of given Java thread or all Java threads (-a)</font>
+ − 81
</code>
+ − 82
</pre>
+ − 83
+ − 84
<h3>JavaScript integration</h3>
+ − 85
+ − 86
<p>Few CLHSDB commands are already implemented in JavaScript. It is possible to extend CLHSDB command set
+ − 87
by implementing more commands in a JavaScript file and by loading it by <b>jsload</b> command. <b>jseval</b>
+ − 88
command may be used to evaluate arbitrary JavaScript expression from a string. Any JavaScript function
+ − 89
may be exposed as a CLHSDB command by registering it using JavaScript <b><code>registerCommand</code></b>
+ − 90
function. This function accepts command name, usage and name of the JavaScript implementation function
+ − 91
as arguments.
+ − 92
</p>
+ − 93
+ − 94
<h3>Simple CLHSDB command implemented in JavaScript</h3>
+ − 95
+ − 96
<b>File: test.js</b>
+ − 97
<pre>
+ − 98
<code>
+ − 99
function helloImpl(name) {
+ − 100
println("hello, " + name);
+ − 101
}
+ − 102
+ − 103
// register the above JavaScript function as CLHSDB command
+ − 104
registerCommand("hello", "hello name", "helloImpl");
+ − 105
</code>
+ − 106
</pre>
+ − 107
---------<br>
+ − 108
+ − 109
"test.js" can be loaded in CLHSDB prompt using <b>jsload</b> command using
+ − 110
+ − 111
<pre>
+ − 112
<code>
+ − 113
hsdb> jsload test.js
+ − 114
</code>
+ − 115
</pre>
+ − 116
+ − 117
</body>
+ − 118
</html>