mirror of
https://github.com/alibaba/arthas.git
synced 2026-10-23 13:42:30 +00:00
update doc
This commit is contained in:
@@ -61,4 +61,6 @@ FROM openjdk:8-jdk-alpine
|
||||
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
|
||||
```
|
||||
|
||||
[https://hub.docker.com/r/hengyunabc/arthas](https://hub.docker.com/r/hengyunabc/arthas)
|
||||
如果想指定版本,可以查看具体的tags:
|
||||
|
||||
[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags)
|
||||
+3
-3
@@ -18,7 +18,7 @@ jad
|
||||
|
||||
### 使用参考
|
||||
|
||||
#### 编绎`java.lang.String`
|
||||
#### 编译`java.lang.String`
|
||||
|
||||
```java
|
||||
$ jad java.lang.String
|
||||
@@ -52,7 +52,7 @@ CharSequence {
|
||||
...
|
||||
```
|
||||
|
||||
#### 反编绎指定的函数
|
||||
#### 反编译指定的函数
|
||||
|
||||
```java
|
||||
$ jad demo.MathGame main
|
||||
@@ -75,7 +75,7 @@ public static void main(String[] args) throws InterruptedException {
|
||||
Affect(row-cnt:1) cost in 228 ms.
|
||||
```
|
||||
|
||||
#### 反编绎时指定ClassLoader
|
||||
#### 反编译时指定ClassLoader
|
||||
|
||||
> 当有多个 `ClassLoader` 都加载了这个类时,`jad` 命令会输出对应 `ClassLoader` 实例的 `hashcode`,然后你只需要重新执行 `jad` 命令,并使用参数 `-c <hashcode>` 就可以反编译指定 ClassLoader 加载的那个类了;
|
||||
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
mc
|
||||
===
|
||||
|
||||
> Memory Compiler/内存编绎器,编绎`.java`文件生成`.class`。
|
||||
> Memory Compiler/内存编译器,编译`.java`文件生成`.class`。
|
||||
|
||||
```bash
|
||||
mc /tmp/Test.java
|
||||
@@ -19,4 +19,4 @@ mc -c 327a647b /tmp/Test.java
|
||||
mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
|
||||
```
|
||||
|
||||
编绎生成`.class`文件之后,可以结合[`redefine`](redefine.md)命令实现热更新代码。
|
||||
编译生成`.class`文件之后,可以结合[redefine](redefine.md)命令实现热更新代码。
|
||||
|
||||
@@ -104,7 +104,7 @@ $ thread 1 | grep 'main('
|
||||
at demo.MathGame.main(MathGame.java:17)
|
||||
```
|
||||
|
||||
## 5. 通过jad来反编绎Main Class
|
||||
## 5. 通过jad来反编译Main Class
|
||||
|
||||
```java
|
||||
$ jad demo.MathGame
|
||||
@@ -226,7 +226,7 @@ ts=2018-11-28 19:22:35; [cost=29.969732ms] result=@ArrayList[
|
||||
|
||||
更多的功能可以查看[进阶使用](advanced-use.md)。
|
||||
|
||||
## 5. 退出arthas
|
||||
## 7. 退出arthas
|
||||
|
||||
如果只是退出当前的连接,可以用`quit`或者`exit`命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ mc /tmp/UserController.java -d /tmp
|
||||
redefine /tmp/com/example/demo/arthas/user/UserController.class
|
||||
```
|
||||
|
||||
* jad命令反编绎,然后可以用其它编绎器,比如vim来修改源码
|
||||
* mc命令来内存编绎修改过的代码
|
||||
* jad命令反编译,然后可以用其它编译器,比如vim来修改源码
|
||||
* mc命令来内存编译修改过的代码
|
||||
* 用redefine命令加载新的字节码
|
||||
|
||||
### redefine的限制
|
||||
|
||||
+2
-1
@@ -233,7 +233,8 @@ time: 2018-12-18 11:30:36
|
||||
# copy arthas
|
||||
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas</pre>
|
||||
</div>
|
||||
<p><a class="reference external" href="https://hub.docker.com/r/hengyunabc/arthas">https://hub.docker.com/r/hengyunabc/arthas</a></p>
|
||||
<p>如果想指定版本,可以查看具体的tags:</p>
|
||||
<p><a class="reference external" href="https://hub.docker.com/r/hengyunabc/arthas/tags">https://hub.docker.com/r/hengyunabc/arthas/tags</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -61,4 +61,6 @@ FROM openjdk:8-jdk-alpine
|
||||
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
|
||||
```
|
||||
|
||||
[https://hub.docker.com/r/hengyunabc/arthas](https://hub.docker.com/r/hengyunabc/arthas)
|
||||
If you want to specify a version, you can view all the tags:
|
||||
|
||||
[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags)
|
||||
@@ -19,4 +19,4 @@ The output directory can be specified with the `-d` option:
|
||||
mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
|
||||
```
|
||||
|
||||
After compiling the `.class` file, you can use the [`redefine`](redefine.md) command to re-define the loaded classes in JVM.
|
||||
After compiling the `.class` file, you can use the [redefine](redefine.md) command to re-define the loaded classes in JVM.
|
||||
|
||||
+2
-1
@@ -231,7 +231,8 @@ time: 2018-12-18 11:30:36
|
||||
# copy arthas
|
||||
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas</pre>
|
||||
</div>
|
||||
<p><a class="reference external" href="https://hub.docker.com/r/hengyunabc/arthas">https://hub.docker.com/r/hengyunabc/arthas</a></p>
|
||||
<p>If you want to specify a version, you can view all the tags:</p>
|
||||
<p><a class="reference external" href="https://hub.docker.com/r/hengyunabc/arthas/tags">https://hub.docker.com/r/hengyunabc/arthas/tags</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
+1
-1
@@ -209,7 +209,7 @@
|
||||
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>After compiling the <tt class="docutils literal">.class</tt> file, you can use the <a class="reference external" href="redefine.md"><tt class="docutils literal">redefine</tt></a> command to re-define the loaded classes in JVM.</p>
|
||||
<p>After compiling the <tt class="docutils literal">.class</tt> file, you can use the <a class="reference internal" href="redefine.html"><span class="doc">redefine</span></a> command to re-define the loaded classes in JVM.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -109,9 +109,9 @@
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">jad</a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#">参数说明</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#">使用参考</a><ul>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#java-lang-string">编绎<tt class="docutils literal">java.lang.String</tt></a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#">反编绎指定的函数</a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#classloader">反编绎时指定ClassLoader</a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#java-lang-string">编译<tt class="docutils literal">java.lang.String</tt></a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#">反编译指定的函数</a></li>
|
||||
<li class="toctree-l4"><a class="reference internal" href="#classloader">反编译时指定ClassLoader</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -241,7 +241,7 @@
|
||||
<div class="section" id="">
|
||||
<span id="id2"></span><h2>使用参考<a class="headerlink" href="#" title="永久链接至标题">¶</a></h2>
|
||||
<div class="section" id="java-lang-string">
|
||||
<span id="java-lang-string"></span><h3>编绎<tt class="docutils literal">java.lang.String</tt><a class="headerlink" href="#java-lang-string" title="永久链接至标题">¶</a></h3>
|
||||
<span id="java-lang-string"></span><h3>编译<tt class="docutils literal">java.lang.String</tt><a class="headerlink" href="#java-lang-string" title="永久链接至标题">¶</a></h3>
|
||||
<div class="highlight-java notranslate"><div class="highlight hljs"><pre class="java">$ jad java.lang.String
|
||||
|
||||
ClassLoader:
|
||||
@@ -274,7 +274,7 @@ CharSequence {
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="">
|
||||
<span id="id3"></span><h3>反编绎指定的函数<a class="headerlink" href="#" title="永久链接至标题">¶</a></h3>
|
||||
<span id="id3"></span><h3>反编译指定的函数<a class="headerlink" href="#" title="永久链接至标题">¶</a></h3>
|
||||
<div class="highlight-java notranslate"><div class="highlight hljs"><pre class="java">$ jad demo.MathGame main
|
||||
|
||||
ClassLoader:
|
||||
@@ -297,7 +297,7 @@ Affect(row-cnt:1) cost in 228 ms.
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="classloader">
|
||||
<span id="classloader"></span><h3>反编绎时指定ClassLoader<a class="headerlink" href="#classloader" title="永久链接至标题">¶</a></h3>
|
||||
<span id="classloader"></span><h3>反编译时指定ClassLoader<a class="headerlink" href="#classloader" title="永久链接至标题">¶</a></h3>
|
||||
<blockquote>
|
||||
<div>当有多个 <tt class="docutils literal">ClassLoader</tt> 都加载了这个类时,<tt class="docutils literal">jad</tt> 命令会输出对应 <tt class="docutils literal">ClassLoader</tt> 实例的 <tt class="docutils literal">hashcode</tt>,然后你只需要重新执行 <tt class="docutils literal">jad</tt> 命令,并使用参数 <tt class="docutils literal">-c <hashcode></tt> 就可以反编译指定 ClassLoader 加载的那个类了;</div></blockquote>
|
||||
<div class="highlight-java notranslate"><div class="highlight hljs"><pre class="java">$ jad org.apache.log4j.Logger
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
<div class="section" id="mc">
|
||||
<span id="mc"></span><h1>mc<a class="headerlink" href="#mc" title="永久链接至标题">¶</a></h1>
|
||||
<blockquote>
|
||||
<div>Memory Compiler/内存编绎器,编绎<tt class="docutils literal">.java</tt>文件生成<tt class="docutils literal">.class</tt>。</div></blockquote>
|
||||
<div>Memory Compiler/内存编译器,编译<tt class="docutils literal">.java</tt>文件生成<tt class="docutils literal">.class</tt>。</div></blockquote>
|
||||
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">mc /tmp/Test.java
|
||||
</pre></div>
|
||||
</div>
|
||||
@@ -211,7 +211,7 @@
|
||||
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">mc -d /tmp/output /tmp/ClassA.java /tmp/ClassB.java
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>编绎生成<tt class="docutils literal">.class</tt>文件之后,可以结合<a class="reference external" href="redefine.md"><tt class="docutils literal">redefine</tt></a>命令实现热更新代码。</p>
|
||||
<p>编译生成<tt class="docutils literal">.class</tt>文件之后,可以结合<a class="reference internal" href="redefine.html"><span class="doc">redefine</span></a>命令实现热更新代码。</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
+4
-4
@@ -98,9 +98,9 @@
|
||||
<li class="toctree-l2"><a class="reference internal" href="#arthas">2. 启动arthas</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#dashboard">3. 查看dashboard</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#threadarthas-demomain-class">4. 通过thread命令来获取到<tt class="docutils literal">arthas-demo</tt>进程的Main Class</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#jadmain-class">5. 通过jad来反编绎Main Class</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#jadmain-class">5. 通过jad来反编译Main Class</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#watch">6. watch</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#arthas">5. 退出arthas</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="#arthas">7. 退出arthas</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="advanced-use.html">进阶使用</a></li>
|
||||
@@ -273,7 +273,7 @@ java.home /Library/Java/JavaVir
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="jadmain-class">
|
||||
<span id="jadmain-class"></span><h2>5. 通过jad来反编绎Main Class<a class="headerlink" href="#jadmain-class" title="永久链接至标题">¶</a></h2>
|
||||
<span id="jadmain-class"></span><h2>5. 通过jad来反编译Main Class<a class="headerlink" href="#jadmain-class" title="永久链接至标题">¶</a></h2>
|
||||
<div class="highlight-java notranslate"><div class="highlight hljs"><pre class="java">$ jad demo.MathGame
|
||||
|
||||
ClassLoader:
|
||||
@@ -393,7 +393,7 @@ ts=2018-11-28 19:22:35; [cost=29.969732ms] result=@ArrayList[
|
||||
<p>更多的功能可以查看<a class="reference internal" href="advanced-use.html"><span class="doc">进阶使用</span></a>。</p>
|
||||
</div>
|
||||
<div class="section" id="arthas">
|
||||
<span id="id2"></span><h2>5. 退出arthas<a class="headerlink" href="#arthas" title="永久链接至标题">¶</a></h2>
|
||||
<span id="id2"></span><h2>7. 退出arthas<a class="headerlink" href="#arthas" title="永久链接至标题">¶</a></h2>
|
||||
<p>如果只是退出当前的连接,可以用<tt class="docutils literal">quit</tt>或者<tt class="docutils literal">exit</tt>命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。</p>
|
||||
<p>如果想完全退出arthas,可以执行<tt class="docutils literal">shutdown</tt>命令。</p>
|
||||
</div>
|
||||
|
||||
+2
-2
@@ -246,8 +246,8 @@ redefine /tmp/com/example/demo/arthas/user/UserController.class
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li>jad命令反编绎,然后可以用其它编绎器,比如vim来修改源码</li>
|
||||
<li>mc命令来内存编绎修改过的代码</li>
|
||||
<li>jad命令反编译,然后可以用其它编译器,比如vim来修改源码</li>
|
||||
<li>mc命令来内存编译修改过的代码</li>
|
||||
<li>用redefine命令加载新的字节码</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user