hotspot/agent/doc/cireplay.html
author serb
Thu, 27 Feb 2014 19:01:32 +0400
changeset 23325 4c3942938b0d
parent 17123 a8e62eed2e3e
permissions -rw-r--r--
8027778: [macosx] Full screen not working properly on 7u45 and jdk8 8010999: [macosx] a constrain of the top level window should be improved 8015100: [macosx] Applet graphics corrupted when applet width/height exceeds screen dimensions Reviewed-by: anthony, pchelko

<html>
<head>
<title>
Replay
</title>
</head>
<body>

<h1>Compiler replay</h1>
<p>
The compiler replay is a function to repeat the compiling process from a crashed java process in compiled method<br>
This function only exists in debug version of VM
</p>
<h2>Usage</h2>
<pre>
First, use SA to attach to the core file, if succeeded, do
       hsdb&gt; dumpreplaydata &lt;address&gt; | -a | &lt;thread_id&gt; [&gt; replay.txt]
       create file replay.txt, address is address of Method, or nmethod(CodeBlob)
       hsdb&gt; buildreplayjars [all | boot | app]
       create files:
         all:
           app.jar, boot.jar
         boot:
           boot.jar
         app:
           app.jar
       exit SA now.
Second, use the obtained replay text file, replay.txt and jar files, app.jar and boot.jar, using debug version of java
       java -Xbootclasspath/p:boot.jar -cp app.jar -XX:ReplayDataFile=&lt;datafile&gt; -XX:+ReplayCompiles ....
       This will replay the compiling process.

       With ReplayCompiles, the replay will recompile all the methods in app.jar, and in boot.jar to emulate the process in java app.

notes:
       1) Most time, we don't need the boot.jar which is the classes loaded from JDK. It will be only modified when an agent(JVMDI) is running and modifies the classes.
       2) If encounter error as "&lt;flag&gt;" not found, that means the SA is using a VMStructs which is different from the one with corefile. In this case, SA has a utility tool vmstructsdump which is located at agent/src/os/&lt;os&gt;/proc/&lt;os_platform&gt;

       Use this tool to dump VM type library:
       vmstructsdump libjvm.so &gt; &lt;type_name&gt;.db

       set env SA_TYPEDB=&lt;type_name&gt;.db (refer different shell for set envs)