update doc

gh-pages
hengyunabc 5 years ago
parent d2aa602115
commit 26b92f34e7

@ -9,13 +9,15 @@
### 钉钉群
* Arthas开源交流钉钉群 21965291 ,搜索群号即可加入。
![](_static/dingding_qr.jpg)
* Arthas开源交流钉钉群2 30707824 ,搜索群号即可加入。
![](_static/dingding2_qr.jpg)
* Arthas开源交流钉钉群 21965291 (已满员) ,搜索群号即可加入。
![](_static/dingding_qr.jpg)
### QQ群

@ -11,6 +11,7 @@ dump
|---:|:---|
|*class-pattern*|类名表达式匹配|
|`[c:]`|类所属 ClassLoader 的 hashcode|
|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name|
|`[d:]`|设置类文件的目标目录|
|[E]|开启正则表达式匹配,默认为通配符匹配|
@ -37,3 +38,27 @@ $ dump -d /tmp/output java.lang.String
null /tmp/output/java/lang/String.class
Affect(row-cnt:1) cost in 138 ms.
```
* 指定classLoader
注意hashcode是变化的需要先查看当前的ClassLoader信息提取对应ClassLoader的hashcode。
如果你使用`-c`你需要手动输入hashcode`-c <hashcode>`
```bash
$ dump -c 3d4eac69 demo.*
```
对于只有唯一实例的ClassLoader可以通过`--classLoaderClass`指定class name使用起来更加方便
```bash
$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.*
HASHCODE CLASSLOADER LOCATION
3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class
+-sun.misc.Launcher$ExtClassLoader@66350f69
Affect(row-cnt:1) cost in 39 ms.
```
* 注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoaderkatacoda目前环境是java8。
`--classLoaderClass` 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令而`-c <hashcode>`是动态变化的。

@ -30,6 +30,25 @@ field: random
]
```
* 指定classLoader
注意hashcode是变化的需要先查看当前的ClassLoader信息使用`sc -d <ClassName>`提取对应ClassLoader的hashcode。
如果你使用`-c`你需要手动输入hashcode`-c <hashcode>`
```bash
$ getstatic -c 3d4eac69 demo.MathGame random
```
对于只有唯一实例的ClassLoader可以通过`--classLoaderClass`指定class name使用起来更加方便
`getstatic --classLoaderClass sun.misc.Launcher$AppClassLoader demo.MathGame random`
* 注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoaderkatacoda目前环境是java8。
`--classLoaderClass` 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令而`-c <hashcode>`是动态变化的。
如果该静态属性是一个复杂对象还可以支持在该属性上通过ognl表示进行遍历过滤访问对象的内部属性等操作。
* OGNL特殊用法请参考[https://github.com/alibaba/arthas/issues/71](https://github.com/alibaba/arthas/issues/71)

@ -16,6 +16,7 @@ jad
|---:|:---|
|*class-pattern*|类名表达式匹配|
|`[c:]`|类所属 ClassLoader 的 hashcode|
|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name|
|[E]|开启正则表达式匹配,默认为通配符匹配|
### 使用参考
@ -144,3 +145,6 @@ public class Logger extends Category
Affect(row-cnt:1) cost in 190 ms.
```
对于只有唯一实例的ClassLoader还可以通过`--classLoaderClass`指定class name使用起来更加方便
`--classLoaderClass` 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令而`-c <hashcode>`是动态变化的。

@ -15,6 +15,15 @@ mc /tmp/Test.java
mc -c 327a647b /tmp/Test.java
```
也可以通过`--classLoaderClass`参数指定ClassLoader
```bash
$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms
```
可以通过`-d`命令指定输出目录:
```bash

@ -27,6 +27,7 @@ redefine
|参数名称|参数说明|
|---:|:---|
|[c:]|ClassLoader的hashcode|
|`[classLoaderClass:]`|指定执行表达式的 ClassLoader 的 class name|
|[p:]|外部的`.class`文件的完整路径,支持多个|
@ -36,6 +37,7 @@ redefine
```bash
redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class
```
### 结合 jad/mc 命令使用

@ -198,13 +198,13 @@
<div class="section" id="id2">
<h2>钉钉群<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<ul class="simple">
<li><p>Arthas开源交流钉钉群2 30707824 ,搜索群号即可加入。</p></li>
<li><p>Arthas开源交流钉钉群 21965291 ,搜索群号即可加入。</p></li>
</ul>
<p><img alt="_images/dingding2_qr.jpg" src="_images/dingding2_qr.jpg" /></p>
<p><img alt="_images/dingding_qr.jpg" src="_images/dingding_qr.jpg" /></p>
<ul class="simple">
<li><p>Arthas开源交流钉钉群 21965291 (已满员) ,搜索群号即可加入。</p></li>
<li><p>Arthas开源交流钉钉群2 30707824 ,搜索群号即可加入。</p></li>
</ul>
<p><img alt="_images/dingding_qr.jpg" src="_images/dingding_qr.jpg" /></p>
<p><img alt="_images/dingding2_qr.jpg" src="_images/dingding2_qr.jpg" /></p>
</div>
<div class="section" id="qq">
<h2>QQ群<a class="headerlink" href="#qq" title="永久链接至标题"></a></h2>

@ -250,6 +250,10 @@
<td align="left">类所属 ClassLoader 的 hashcode</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">指定执行表达式的 ClassLoader 的 class name</td>
</tr>
<tr>
<td align="right"><code>[d:]</code></td>
<td align="left">设置类文件的目标目录</td>
</tr>
@ -277,6 +281,24 @@ Affect(row-cnt:1) cost in 39 ms.</pre></div>
null /tmp/output/java/lang/String.class
Affect(row-cnt:1) cost in 138 ms.</pre></div>
</div>
<ul class="simple">
<li><p>指定classLoader</p></li>
</ul>
<p>注意hashcode是变化的需要先查看当前的ClassLoader信息提取对应ClassLoader的hashcode。</p>
<p>如果你使用<code class="docutils literal notranslate"><span class="pre">-c</span></code>你需要手动输入hashcode<code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ dump -c 3d4eac69 demo.*</pre></div>
</div>
<p>对于只有唯一实例的ClassLoader可以通过<code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code>指定class name使用起来更加方便</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.*
HASHCODE CLASSLOADER LOCATION
3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class
+-sun.misc.Launcher$ExtClassLoader@66350f69
Affect(row-cnt:1) cost in 39 ms.</pre></div>
</div>
<ul class="simple">
<li><p>注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoaderkatacoda目前环境是java8。</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令<code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code>是动态变化的。</p>
</div>
</div>

@ -9,13 +9,16 @@ Questions about how to use Arthas and opinions can be directly raised in issues
### DingDing Group
* Arthas open source discussion Group 21965291 You can join by searching for group number。
![](_static/dingding_qr.jpg)
* Arthas open source discussion Group 2 30707824 You can join by searching for group number。
![](_static/dingding2_qr.jpg)
* Arthas open source discussion Group 21965291 Full You can join by searching for group number。
![](_static/dingding_qr.jpg)
### Instructions for Installing DingTalk

@ -11,6 +11,7 @@ dump
|---:|:---|
|*class-pattern*|class name pattern|
|`[c:]`|hashcode of the [class loader](classloader.md) that loaded the target class|
|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. |
|`[d:]`|set the destination directory for class files|
|`[E]`|turn on regex match, the default behavior is wild card match|
@ -37,3 +38,27 @@ $ dump -d /tmp/output java.lang.String
null /tmp/output/java/lang/String.class
Affect(row-cnt:1) cost in 138 ms.
```
* Specify classLoader
Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader.
if you use`-c`, you have to manually type hashcode by `-c <hashcode>`.
```bash
$ dump -c 3d4eac69 demo.*
```
For classloader with only one instance, it can be specified by `--classLoaderClass` using class name, which is more convenient to use.
```bash
$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.*
HASHCODE CLASSLOADER LOCATION
3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class
+-sun.misc.Launcher$ExtClassLoader@66350f69
Affect(row-cnt:1) cost in 39 ms.
```
* PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8.
The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c <hashcode>` is dynamic.

@ -29,6 +29,23 @@ field: random
]
```
* Specify classLoader
Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader using `sc -d <ClassName>`.
if you use`-c`, you have to manually type hashcode by `-c <hashcode>`.
```bash
$ getstatic -c 3d4eac69 demo.MathGame random
```
For classloader with only one instance, it can be specified by `--classLoaderClass` using class name, which is more convenient to use.
`getstatic --classLoaderClass demo.MathGame random`
* PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 it's jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8.
The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c <hashcode>` is dynamic.
Tip: if the static field is a complex class, you can even use [`OGNL`](https://commons.apache.org/proper/commons-ognl/language-guide.html) to traverse, filter and access the inner properties of this class.

@ -16,6 +16,7 @@ jad
|---:|:---|
|*class-pattern*|pattern for the class name|
|`[c:]`|hashcode of the class loader that loads the class|
|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. |
|`[E]`|turn on regex match while the default is wildcard match|
### Usage
@ -143,3 +144,7 @@ public class Logger extends Category
Affect(row-cnt:1) cost in 190 ms.
```
For classloader with only one instance, it can be specified by `--classLoaderClass` using class name, which is more convenient to use.
The value of `--classloaderclass` is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, `-c <hashcode>` is dynamic.

@ -144,11 +144,11 @@ The value of `--classloaderclass` is the class name of classloader. It can only
update logger level success.
```
#### 指定classloader更新 logger level
#### Speecify classloader to update logger level
默认情况下logger命令会在SystemClassloader下执行如果应用是传统的`war`应用或者spring boot fat jar启动的应用那么需要指定classloader。
By defaultlogger command will be executed under SystemClassloader, if the application is a traditional `war`, or using spring boot fat jar, then it needs to specify classloader。
可以先用 `sc -d yourClassName` 来查看具体的 classloader hashcode然后在更新level时指定classloader
You can first use `sc -d yourClassName` to check specified classloader hashcodethen specify classloader when updating logger level:
```bash
[arthas@2062]$ logger -c 2a139a55 --name ROOT --level debug

@ -15,6 +15,15 @@ The classloader can be specified with the `-c` option:
mc -c 327a647b /tmp/Test.java
```
You can also specify the ClassLoader with the `--classLoaderClass` option:
```bash
$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms
```
The output directory can be specified with the `-d` option:
```bash

@ -28,6 +28,7 @@ Reference: [Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/do
|Name|Specification|
|---:|:---|
|`[c:]`|hashcode of the class loader|
|`[classLoaderClass:]`| The class name of the ClassLoader that executes the expression. |
|`[p:]`|absolute path of the external `*.class`, multiple paths are separated with 'space'|
@ -35,7 +36,8 @@ Reference: [Instrumentation#redefineClasses](https://docs.oracle.com/javase/8/do
```bash
redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test$Inner.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class
```
### Use with the jad/mc command

@ -196,13 +196,13 @@
<div class="section" id="dingding-group">
<h2>DingDing Group<a class="headerlink" href="#dingding-group" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li><p>Arthas open source discussion Group 2 30707824 You can join by searching for group number。</p></li>
<li><p>Arthas open source discussion Group 21965291 You can join by searching for group number。</p></li>
</ul>
<p><img alt="_images/dingding2_qr.jpg" src="_images/dingding2_qr.jpg" /></p>
<p><img alt="_images/dingding_qr.jpg" src="_images/dingding_qr.jpg" /></p>
<ul class="simple">
<li><p>Arthas open source discussion Group 21965291 Full You can join by searching for group number。</p></li>
<li><p>Arthas open source discussion Group 2 30707824 You can join by searching for group number。</p></li>
</ul>
<p><img alt="_images/dingding_qr.jpg" src="_images/dingding_qr.jpg" /></p>
<p><img alt="_images/dingding2_qr.jpg" src="_images/dingding2_qr.jpg" /></p>
</div>
<div class="section" id="instructions-for-installing-dingtalk">
<h2>Instructions for Installing DingTalk<a class="headerlink" href="#instructions-for-installing-dingtalk" title="Permalink to this headline"></a></h2>

@ -247,6 +247,10 @@
<td align="left">hashcode of the <a href="classloader.md">class loader</a> that loaded the target class</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">The class name of the ClassLoader that executes the expression.</td>
</tr>
<tr>
<td align="right"><code>[d:]</code></td>
<td align="left">set the destination directory for class files</td>
</tr>
@ -274,6 +278,24 @@ Affect(row-cnt:1) cost in 39 ms.</pre></div>
null /tmp/output/java/lang/String.class
Affect(row-cnt:1) cost in 138 ms.</pre></div>
</div>
<ul class="simple">
<li><p>Specify classLoader</p></li>
</ul>
<p>Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader.</p>
<p>if you use<code class="docutils literal notranslate"><span class="pre">-c</span></code>, you have to manually type hashcode by <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code>.</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ dump -c 3d4eac69 demo.*</pre></div>
</div>
<p>For classloader with only one instance, it can be specified by <code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> using class name, which is more convenient to use.</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ dump --classLoaderClass sun.misc.Launcher$AppClassLoader demo.*
HASHCODE CLASSLOADER LOCATION
3d4eac69 +-sun.misc.Launcher$AppClassLoader@3d4eac69 /Users/admin/logs/arthas/classdump/sun.misc.Launcher$AppClassLoader-3d4eac69/demo/MathGame.class
+-sun.misc.Launcher$ExtClassLoader@66350f69
Affect(row-cnt:1) cost in 39 ms.</pre></div>
</div>
<ul class="simple">
<li><p>PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 its jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8.</p></li>
</ul>
<p>The value of <code class="docutils literal notranslate"><span class="pre">--classloaderclass</span></code> is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code> is dynamic.</p>
</div>
</div>

@ -249,6 +249,19 @@ field: random
seedOffset=@Long[24],
]</pre></div>
</div>
<ul class="simple">
<li><p>Specify classLoader</p></li>
</ul>
<p>Note that the hashcode changes, you need to check the current ClassLoader information first, and extract the hashcode corresponding to the ClassLoader using <code class="docutils literal notranslate"><span class="pre">sc</span> <span class="pre">-d</span> <span class="pre">&lt;ClassName&gt;</span></code>.</p>
<p>if you use<code class="docutils literal notranslate"><span class="pre">-c</span></code>, you have to manually type hashcode by <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code>.</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ getstatic -c 3d4eac69 demo.MathGame random</pre></div>
</div>
<p>For classloader with only one instance, it can be specified by <code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> using class name, which is more convenient to use.</p>
<p><code class="docutils literal notranslate"><span class="pre">getstatic</span> <span class="pre">--classLoaderClass</span> <span class="pre">demo.MathGame</span> <span class="pre">random</span></code></p>
<ul class="simple">
<li><p>PS: Here the classLoaderClass in java 8 is sun.misc.Launcher$AppClassLoader, while in java 11 its jdk.internal.loader.ClassLoaders$AppClassLoader. Currently katacoda using java 8.</p></li>
</ul>
<p>The value of <code class="docutils literal notranslate"><span class="pre">--classloaderclass</span></code> is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code> is dynamic.</p>
<p>Tip: if the static field is a complex class, you can even use <a class="reference external" href="https://commons.apache.org/proper/commons-ognl/language-guide.html"><code class="docutils literal notranslate"><span class="pre">OGNL</span></code></a> to traverse, filter and access the inner properties of this class.</p>
<div class="toctree-wrapper compound">
<ul>

@ -258,6 +258,10 @@
<td align="left">hashcode of the class loader that loads the class</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">The class name of the ClassLoader that executes the expression.</td>
</tr>
<tr>
<td align="right"><code>[E]</code></td>
<td align="left">turn on regex match while the default is wildcard match</td>
</tr>
@ -383,6 +387,8 @@ public class Logger extends Category
Affect(row-cnt:1) cost in 190 ms.</pre></div>
</div>
<p>For classloader with only one instance, it can be specified by <code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> using class name, which is more convenient to use.</p>
<p>The value of <code class="docutils literal notranslate"><span class="pre">--classloaderclass</span></code> is the class name of classloader. It can only work when it matches a unique classloader instance. The purpose is to facilitate the input of general commands. However, <code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code> is dynamic.</p>
</div>
</div>
</div>

@ -118,7 +118,7 @@
<li class="toctree-l4"><a class="reference internal" href="#view-logger-information-for-the-special-name">View logger information for the special name</a></li>
<li class="toctree-l4"><a class="reference internal" href="#view-logger-information-for-the-special-classloader">View logger information for the special classloader</a></li>
<li class="toctree-l4"><a class="reference internal" href="#update-logger-level">Update logger level</a></li>
<li class="toctree-l4"><a class="reference internal" href="#classloader-logger-level">指定classloader更新 logger level</a></li>
<li class="toctree-l4"><a class="reference internal" href="#speecify-classloader-to-update-logger-level">Speecify classloader to update logger level</a></li>
<li class="toctree-l4"><a class="reference internal" href="#view-the-logger-information-without-appenders">View the logger information without appenders</a></li>
</ul>
</li>
@ -361,10 +361,10 @@
update logger level success.</pre></div>
</div>
</div>
<div class="section" id="classloader-logger-level">
<h3>指定classloader更新 logger level<a class="headerlink" href="#classloader-logger-level" title="Permalink to this headline"></a></h3>
<p>默认情况下logger命令会在SystemClassloader下执行如果应用是传统的<code class="docutils literal notranslate"><span class="pre">war</span></code>应用或者spring boot fat jar启动的应用那么需要指定classloader。</p>
<p>可以先用 <code class="docutils literal notranslate"><span class="pre">sc</span> <span class="pre">-d</span> <span class="pre">yourClassName</span></code> 来查看具体的 classloader hashcode然后在更新level时指定classloader</p>
<div class="section" id="speecify-classloader-to-update-logger-level">
<h3>Speecify classloader to update logger level<a class="headerlink" href="#speecify-classloader-to-update-logger-level" title="Permalink to this headline"></a></h3>
<p>By defaultlogger command will be executed under SystemClassloader, if the application is a traditional <code class="docutils literal notranslate"><span class="pre">war</span></code>, or using spring boot fat jar, then it needs to specify classloader。</p>
<p>You can first use <code class="docutils literal notranslate"><span class="pre">sc</span> <span class="pre">-d</span> <span class="pre">yourClassName</span></code> to check specified classloader hashcodethen specify classloader when updating logger level:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">[arthas@2062]$ logger -c 2a139a55 --name ROOT --level debug</pre></div>
</div>
</div>

@ -229,6 +229,12 @@
<p>The classloader can be specified with the <code class="docutils literal notranslate"><span class="pre">-c</span></code> option:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">mc -c 327a647b /tmp/Test.java</pre></div>
</div>
<p>You can also specify the ClassLoader with the <code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> option:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms</pre></div>
</div>
<p>The output directory can be specified with the <code class="docutils literal notranslate"><span class="pre">-d</span></code> option:</p>
<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>

@ -266,6 +266,10 @@ The reason is that in the JDK <code class="docutils literal notranslate"><span c
<td align="left">hashcode of the class loader</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">The class name of the ClassLoader that executes the expression.</td>
</tr>
<tr>
<td align="right"><code>[p:]</code></td>
<td align="left">absolute path of the external <code>*.class</code>, multiple paths are separated with 'space'</td>
</tr>
@ -274,7 +278,8 @@ The reason is that in the JDK <code class="docutils literal notranslate"><span c
<div class="section" id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test$Inner.class</pre></div>
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class</pre></div>
</div>
</div>
<div class="section" id="use-with-the-jad-mc-command">

File diff suppressed because one or more lines are too long

@ -248,6 +248,19 @@ field: random
seedOffset=@Long[24],
]</pre></div>
</div>
<ul class="simple">
<li><p>指定classLoader</p></li>
</ul>
<p>注意hashcode是变化的需要先查看当前的ClassLoader信息使用<code class="docutils literal notranslate"><span class="pre">sc</span> <span class="pre">-d</span> <span class="pre">&lt;ClassName&gt;</span></code>提取对应ClassLoader的hashcode。</p>
<p>如果你使用<code class="docutils literal notranslate"><span class="pre">-c</span></code>你需要手动输入hashcode<code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ getstatic -c 3d4eac69 demo.MathGame random</pre></div>
</div>
<p>对于只有唯一实例的ClassLoader可以通过<code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code>指定class name使用起来更加方便</p>
<p><code class="docutils literal notranslate"><span class="pre">getstatic</span> <span class="pre">--classLoaderClass</span> <span class="pre">sun.misc.Launcher$AppClassLoader</span> <span class="pre">demo.MathGame</span> <span class="pre">random</span></code></p>
<ul class="simple">
<li><p>注: 这里classLoaderClass 在 java 8 是 sun.misc.Launcher$AppClassLoader而java 11的classloader是jdk.internal.loader.ClassLoaders$AppClassLoaderkatacoda目前环境是java8。</p></li>
</ul>
<p><code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令<code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code>是动态变化的。</p>
<p>如果该静态属性是一个复杂对象还可以支持在该属性上通过ognl表示进行遍历过滤访问对象的内部属性等操作。</p>
<ul class="simple">
<li><p>OGNL特殊用法请参考<a class="reference external" href="https://github.com/alibaba/arthas/issues/71">https://github.com/alibaba/arthas/issues/71</a></p></li>

@ -261,6 +261,10 @@
<td align="left">类所属 ClassLoader 的 hashcode</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">指定执行表达式的 ClassLoader 的 class name</td>
</tr>
<tr>
<td align="right">[E]</td>
<td align="left">开启正则表达式匹配,默认为通配符匹配</td>
</tr>
@ -386,6 +390,8 @@ public class Logger extends Category
Affect(row-cnt:1) cost in 190 ms.</pre></div>
</div>
<p>对于只有唯一实例的ClassLoader还可以通过<code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code>指定class name使用起来更加方便</p>
<p><code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code> 的值是ClassLoader的类名只有匹配到唯一的ClassLoader实例时才能工作目的是方便输入通用命令<code class="docutils literal notranslate"><span class="pre">-c</span> <span class="pre">&lt;hashcode&gt;</span></code>是动态变化的。</p>
</div>
</div>
</div>

@ -232,6 +232,12 @@
<p>可以通过<code class="docutils literal notranslate"><span class="pre">-c</span></code>参数指定classloader</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">mc -c 327a647b /tmp/Test.java</pre></div>
</div>
<p>也可以通过<code class="docutils literal notranslate"><span class="pre">--classLoaderClass</span></code>参数指定ClassLoader</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ mc --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /tmp/UserController.java -d /tmp
Memory compiler output:
/tmp/com/example/demo/arthas/user/UserController.class
Affect(row-cnt:1) cost in 346 ms</pre></div>
</div>
<p>可以通过<code class="docutils literal notranslate"><span class="pre">-d</span></code>命令指定输出目录:</p>
<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>

@ -269,6 +269,10 @@
<td align="left">ClassLoader的hashcode</td>
</tr>
<tr>
<td align="right"><code>[classLoaderClass:]</code></td>
<td align="left">指定执行表达式的 ClassLoader 的 class name</td>
</tr>
<tr>
<td align="right">[p:]</td>
<td align="left">外部的<code>.class</code>文件的完整路径,支持多个</td>
</tr>
@ -277,7 +281,8 @@
<div class="section" id="id3">
<h2>使用参考<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash"> redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class</pre></div>
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
redefine --classLoaderClass sun.misc.Launcher$AppClassLoader /tmp/Test.class /tmp/Test\$Inner.class</pre></div>
</div>
</div>
<div class="section" id="jad-mc">

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save