hotspot/agent/make/index.html
author kvn
Mon, 25 Feb 2008 15:05:44 -0800
changeset 202 dc13bf0e5d5d
parent 1 489c9b5090e2
permissions -rw-r--r--
6633953: type2aelembytes{T_ADDRESS} should be 8 bytes in 64 bit VM Summary: T_ADDRESS size is defined as 'int' size (4 bytes) but C2 use it for raw pointers and as memory type for StoreP and LoadP nodes. Reviewed-by: jrose
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
<HTML>
489c9b5090e2 Initial load
duke
parents:
diff changeset
     2
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
<HEAD>
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
<TITLE>
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
Using The HotSpot Serviceability Agent
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
</TITLE>
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
</HEAD>
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
<BODY TEXT="#000000" BGCOLOR="#FFFFFF">
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
<H1>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
Using The HotSpot Serviceability Agent
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
</H1>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
<H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
Contents
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
</H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    19
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    20
489c9b5090e2 Initial load
duke
parents:
diff changeset
    21
<UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
<LI> <A HREF = "#INTRODUCTION">Introduction</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
<LI> <A HREF = "#SOURCES">Organization of the sources</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
<LI> <A HREF = "#RUNNING">Running HSDB</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
<LI> <A HREF = "#NOTES">Notes</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
</UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
<H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
<A NAME="INTRODUCTION">
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
Introduction
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
</H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
The HotSpot Serviceability Agent (SA) is a set of Java APIs which
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
mirror the internal APIs of the HotSpot VM and which can be used to
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
examine the state of a HotSpot VM.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
The system understands the layout of certain VM data structures and is
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
able to traverse these structures in an examination-only fashion; that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
is, it does not rely on being able to run code in the target VM. For
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
this reason it transparently works with either a running VM or a core
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
file.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
The system can reconstruct information about Java frames on the stack
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
and objects in the heap. Many of the important data structures in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
VM like the CodeCache, Universe, StubQueue, Frames, and VFrames have
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
been exposed and have relatively complete (or at least useful)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
implementations.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
A small graphical debugger called HSDB (the "HotSpot Debugger") has
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
been written using these APIs. It provides stack memory dumps
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
annotated with method invocations, compiled-code inlining (if
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
present), interpreted vs. compiled code, interpreter codelets (if
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
interpreted), and live oops from oop-map information. It also provides
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
a tree-based oop inspector. More information will be added as
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
necessary; please <A HREF = "mailto:kenneth.russell@eng">send
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
email</A> with suggestions on what would be useful.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
The SA currently only works on Solaris. It uses dbx to connect to the
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
remote process or core file and communicates with a small piece of
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
code (an "import module") loaded into the debugger.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
<H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
<A NAME="SOURCES">
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
Organization of the sources
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
</H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
The Java-side source code, which is the bulk of the SA, is in
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
src/share/vm/agent. The organization of the sun.jvm.hotspot package
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
hierarchy mirrors the organization in the VM. This should allow
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
engineers familiar with the HotSpot sources to quickly understand how
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
the SA works and to make modifications if necessary. To build these
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
sources, cd to src/share/vm/agent and type "make".
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
The SA on Solaris works by communicating with a small piece of code
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
(an "import module") loaded into dbx. The source code for this import
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
module is in src/os/solaris/agent. To build this library, cd to
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
src/os/solaris/agent and type "make 32bit" or "make 64bit". The
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
distinction is necessary because the SPARC version of dbx ships with
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
two versions of its executable, and depending on which architecture
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
(v8 or v9) the debugger is running on selects the appropriate
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
executable. The SA tries the v8 version first, but if you are running
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
on a v9 machine you must provide both versions to the SA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
The system is currently hardwired to look on jano for its dbx
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
executable and import module. The relevant directory structure looks
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
like this:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
<UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  <LI> .../hotspot/sa/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
  <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
    <LI> solaris/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
    <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
      <LI> sparc/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
      <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
        <LI> bin/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
        <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
	  <LI> dbx: symlink to (v8) dbx 7.0 executable
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
	</UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
      </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
      <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
        <LI> lib/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
        <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
          <LI> libsvc_agent_dbx.so: 32-bit version of import module
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
        </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
      </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
      <LI> sparcv9/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
      <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
        <LI> lib/
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
        <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
          <LI> libsvc_agent_dbx.so: 32-bit version of import module
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
        </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
      </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
    </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  </UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
</UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
The code which builds up path names to these executables is contained
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
in sun.jvm.hotspot.HotSpotAgent.java. There are hardcoded paths in
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
this file to jano, but the rest of the system is isolated from this.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
(It would be nice to have a panel in the debugger allowing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
configuration of all of the known operating systems' options; right
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
now Solaris is the only supported OS, making that easier.)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
<H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
<A NAME="RUNNING">
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
Running HSDB
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
</H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
An installation of HSDB has been placed on jano. To access it, add the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
following directory to your PATH:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
<PRE>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
    /net/jano/export/disk05/hotspot/sa/bin/common
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
</PRE>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
To start the debugger, type "hsdb".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
Alternatively, you can start a local build of the debugger by building
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
the sources in src/share/vm/agent, cd'ing to that directory, and
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
typing "java sun.jvm.hotspot.HSDB".
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
There are three modes for the debugger: attaching to a local process,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
opening a core file, and attaching to a remote "debug server". The
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
remote case requires two programs to be running on the remote machine:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
the rmiregistry (see the script "start-rmiregistry" in this directory;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
run this in the background) and the debug server (see the script
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
"start-debug-server"), in that order. start-rmiregistry takes no
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
arguments; start-debug-server takes as argument the process ID or the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
executable and core file names to allow remote debugging of. Make sure
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
you do NOT have a CLASSPATH environment variable set when you run
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
these scripts. (The classes put into the rmiregistry are in sun.*, and
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
there are permissions problems if they aren't placed on the boot
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
classpath.)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
NOTE that the SA currently only works against VMs on Solaris/SPARC.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
Remote debugging of Solaris/SPARC VMs on arbitrary platforms is
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
possible using the debug server; select "Connect to debug server..."
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
in HSDB.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
Once the debugger has been launched, the threads list is displayed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
The current set of functionality allows:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
<UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
<LI> Browsing of the annotated stack memory ("Stack Memory" button). It
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
     is currently annotated with the following information:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  <UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  <LI> Method names of the Java frames and their extents (supporting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
       inlined compiled methods)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  <LI> Locations and types of oops, found using the oop map information
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
       from compiled methods (interpreter oop maps coming soon)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  <LI> If a Java frame was interrupted by a signal (e.g., because of a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
       crash), annotates the frame with the signal name and number
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  <LI> Interpreter codelet descriptions for interpreted frames
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  </UL>  
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
<LI> Finding which thread or threads caused a crash (currently
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
     identified by the presence of a signal handler frame)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
<LI> Browsing of oops using the Oop Inspector.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
<LI> Browsing of the java.lang.Thread object's oop.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
<LI> Object histogram and inspection of objects therein.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
</UL>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
More functionality is planned. Please <A HREF =
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
"mailto:kenneth.russell@eng">send email</A> with suggestions on what
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
would be useful, with any questions or comments, or if the debugger
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
crashes.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
<H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
<A NAME="NOTES">
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
Notes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
</A>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
</H2>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
HSDB does not suspend the system at a safepoint, but at an arbitrary
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
point. This means that many of the invariants in the VM's code are not
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
followed.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
As it happens, most of the places where the code ported over from the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
VM has failed involve the topmost frame on the stack. Some
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
modifications have been made to allow the system to recognize
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
problematic situations.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
<P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
Certainly, not all of the failure modes of the debugger have been
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
found. Please <A HREF = "mailto:kenneth.russell@eng">send email</A> if
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
HSDB throws an exception. The best debugging aid in these situations
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
is a core file since it is a static view of the VM to which we can
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
then adapt the debugger code, as opposed to having to try to suspend
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
the VM over and over to reproduce the failure. gcore (1) is a useful
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
tool. (NOTE: do not try gcore with any application using the DGA X
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
server extension (example: Java2Demo); the kernel will panic. See bug
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
4343237.)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
</P>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
</BODY>
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
</HTML>