You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arthas/doc/retransform.html

91 lines
74 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
3 years ago
<meta name="generator" content="VuePress 2.0.0-beta.51">
<style>
:root {
--c-bg: #fff;
}
html.dark {
--c-bg: #22272e;
}
html, body {
background-color: var(--c-bg);
}
</style>
<script>
const userMode = localStorage.getItem('vuepress-color-scheme');
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
document.documentElement.classList.toggle('dark', true);
}
</script>
3 years ago
<link rel="icon" href="/images/favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta property="og:title" content="Arthas"><meta property="og:image:alt" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta property="og:image" content="/images/arthas_mate_image.png"><meta property="og:description" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="600"><meta property="twitter:image:src" content="/images/arthas_mate_image.png"><meta property="twitter:image:alt" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta itemprop="name" content="Arthas"><meta itemprop="image" content="/images/arthas_mate_image.png"><meta itemprop="description" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
3 years ago
</script><meta name="aes-config" content="pid=xux-opensource&user_type=101&uid=&username="><script src="//g.alicdn.com/alilog/mlog/aplus_v2.js" id="beacon-aplus" exparams="clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"></script><script src="//g.alicdn.com/aes/??tracker/1.0.34/index.js,tracker-plugin-pv/2.4.5/index.js,tracker-plugin-event/1.2.5/index.js,tracker-plugin-jserror/1.0.13/index.js,tracker-plugin-api/1.1.14/index.js,tracker-plugin-perf/1.1.8/index.js,tracker-plugin-eventTiming/1.0.4/index.js"></script><title>retransform | arthas</title><meta name="description" content="arthas 使用文档">
3 years ago
<link rel="modulepreload" href="/assets/app.b8f28394.js"><link rel="modulepreload" href="/assets/retransform.html.857a4467.js"><link rel="modulepreload" href="/assets/retransform.html.dd188365.js"><link rel="prefetch" href="/assets/index.html.4710759f.js"><link rel="prefetch" href="/assets/index.html.b82e60b6.js"><link rel="prefetch" href="/assets/index.html.47de61d0.js"><link rel="prefetch" href="/assets/advanced-use.html.7af41ed0.js"><link rel="prefetch" href="/assets/advice-class.html.0fbee513.js"><link rel="prefetch" href="/assets/agent.html.c69bb369.js"><link rel="prefetch" href="/assets/arthas-properties.html.ec9e34a7.js"><link rel="prefetch" href="/assets/arthas3.html.6f8a1b46.js"><link rel="prefetch" href="/assets/async.html.77838888.js"><link rel="prefetch" href="/assets/auth.html.e9c19ade.js"><link rel="prefetch" href="/assets/base64.html.bede7a83.js"><link rel="prefetch" href="/assets/batch-support.html.1b6f5b00.js"><link rel="prefetch" href="/assets/cat.html.884da075.js"><link rel="prefetch" href="/assets/classloader.html.fd7544ef.js"><link rel="prefetch" href="/assets/cls.html.1a584735.js"><link rel="prefetch" href="/assets/commands.html.96c18ca1.js"><link rel="prefetch" href="/assets/contact-us.html.966d3402.js"><link rel="prefetch" href="/assets/dashboard.html.d19c1ce5.js"><link rel="prefetch" href="/assets/docker.html.ff6648d8.js"><link rel="prefetch" href="/assets/download.html.17f7b1d7.js"><link rel="prefetch" href="/assets/dump.html.b770ec31.js"><link rel="prefetch" href="/assets/echo.html.13a90cb0.js"><link rel="prefetch" href="/assets/faq.html.0ae329d6.js"><link rel="prefetch" href="/assets/getstatic.html.bceeb20f.js"><link rel="prefetch" href="/assets/grep.html.f39bef00.js"><link rel="prefetch" href="/assets/groovy.html.ff092ae3.js"><link rel="prefetch" href="/assets/heapdump.html.304710b2.js"><link rel="prefetch" href="/assets/help.html.2953c2ac.js"><link rel="prefetch" href="/assets/history.html.78884cf1.js"><link rel="prefetch" href="/assets/http-api.html.c4a2d084.js"><link rel="prefetch" href="/assets/idea-plugin.html.1d460f41.js"><link rel="prefetch" href="/assets/install-detail.html.6858e5b4.js"><link rel="prefetch" href="/assets/jad.html.74e64c94.js"><link rel="prefetch" href="/assets/jfr.html.4409b634.js"><link rel="prefetch" href="/assets/jvm.html.dfd16149.js"><link rel="prefetch" href="/assets/keymap.html.1f4058d9.js"><link rel="prefetch" href="/assets/logger.html.b9a5fc3a.js"><link rel="prefetch" href="/assets/manual-install.html.032e3ad1.js"><link rel="prefetch" href="/assets/mbean.html.c4b6181d.js"><link rel="prefetch" href="/assets/mc.html.e7ef3234.js"><link rel="prefetch" href="/assets/memory.html.8f197f94.js"><link rel="prefetch" href="/assets/monitor.html.1a9e3203.js"><link rel="prefetch" href="/assets/ognl.html.e844f678.js"><link rel="prefetch" href="/assets/options.html.c5b2502d.js"><link rel="prefetch" href="/assets/perfcounter.html.0017bc1c.js"><link rel="prefetch" href="/assets/profiler.html.d5dff026.js"><link rel="prefetch" href="/assets/pwd.html.b5869172.js"><link rel="prefetch" href="/assets/quick-start.html.baa4d023.js"><link rel="prefetch" href="/assets/quit.html.d4b1deec.js"><link rel="prefetch" href="/assets/redefine.html.f435713e.js"><link rel="prefetch" href="/assets/release-notes.html.3b9e6f5d.js"><link rel="prefetch" href="/assets/reset.html.bf4269d2.js"><link rel="prefetch" href="/assets/save-log.html.a1e023a5.js"><link rel="prefetch" href="/assets/sc.html.dd2f6580.js"><link rel="prefetch" href="/assets/session.html.845073de.js"><link rel="prefetch" href="/assets/sm.html.3eaf6ab4.js"><link rel="prefetch" href="/assets/spring-boot-starter.html.fca54f6f.js"><link rel="prefetch" href="/assets/stack.html.9a709964.js"><link rel="prefetch" href="/assets/start-arthas.html.26165879.js"><link rel="prefetch" href="/assets/stop.html.a10e5134.js"><link rel="prefetch" href="/assets/sysenv.html.d77899be.js"><link rel="prefetch" href="/assets/sysprop.html.3641f71d.js"><link rel="prefetch" href="/assets/tee.html.afc1643a.js"><link rel="prefetch" href="/assets/thread.html.d84e8
3 years ago
<link rel="stylesheet" href="/assets/style.da1934a3.css">
</head>
<body>
3 years ago
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="切换侧边栏" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class="" data-v-61144abc><!----><span class="site-name can-hide" data-v-61144abc>arthas</span><span class="navbar-version" data-v-61144abc>v3.6.6</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/" class="" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="/doc/arthas-tutorials.html?language=cn&amp;id=arthas-basics" rel="noopener noreferrer" target="_blank" aria-label="在线教程"><!--[--><!--]--><span>在线教程</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/" class="router-link-active" aria-label="文档"><!--[--><!--]--> 文档 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/commands.md" class="" aria-label="命令列表"><!--[--><!--]--> 命令列表 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/download.md" class="" aria-label="下载"><!--[--><!--]--> 下载 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="解决方案"><span class="title">解决方案</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="解决方案"><span class="title">解决方案</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a class="external-link" href="https://cn.aliyun.com/product/aliware/mse?spm=arthas.topbar.0.0.0" rel="noopener noreferrer" target="_blank" aria-label="微服务解决方案"><!--[--><!--]--><span>微服务解决方案</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.aliyun.com/aliware/txc?spm=arthas.topbar.0.0.0" rel="noopener noreferrer" target="_blank" aria-label="分布式事务解决方案"><!--[--><!--]--><span>分布式事务解决方案</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.aliyun.com/product/ahas?spm=artha
3 years ago
retransform <span class="token parameter variable">-l</span>
retransform <span class="token parameter variable">-d</span> <span class="token number">1</span> <span class="token comment"># delete retransform entry</span>
retransform <span class="token parameter variable">--deleteAll</span> <span class="token comment"># delete all retransform entries</span>
retransform <span class="token parameter variable">--classPattern</span> demo.* <span class="token comment"># triger retransform classes</span>
retransform <span class="token parameter variable">-c</span> 327a647b /tmp/Test.class /tmp/Test<span class="token punctuation">\</span><span class="token variable">$Inner</span>.class
retransform <span class="token parameter variable">--classLoaderClass</span> <span class="token string">&#39;sun.misc.Launcher$AppClassLoader&#39;</span> /tmp/Test.class
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="retransform-指定的-class-文件" tabindex="-1"><a class="header-anchor" href="#retransform-指定的-class-文件" aria-hidden="true">#</a> retransform 指定的 .class 文件</h2><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ retransform /tmp/MathGame.class
retransform success, size: <span class="token number">1</span>, classes:
demo.MathGame
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>加载指定的 .class 文件,然后解析出 class name再 retransform jvm 中已加载的对应的类。每加载一个 <code>.class</code> 文件,则会记录一个 retransform entry.</p><div class="custom-container tip"><p class="custom-container-title">提示</p><p>如果多次执行 retransform 加载同一个 class 文件,则会有多条 retransform entry.</p></div><h2 id="查看-retransform-entry" tabindex="-1"><a class="header-anchor" href="#查看-retransform-entry" aria-hidden="true">#</a> 查看 retransform entry</h2><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ retransform <span class="token parameter variable">-l</span>
Id ClassName TransformCount LoaderHash LoaderClassName
<span class="token number">1</span> demo.MathGame <span class="token number">1</span> null null
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>TransformCount 统计在 ClassFileTransformer#transform 函数里尝试返回 entry 对应的 .class 文件的次数,但并不表明 transform 一定成功。</li></ul><h2 id="删除指定-retransform-entry" tabindex="-1"><a class="header-anchor" href="#删除指定-retransform-entry" aria-hidden="true">#</a> 删除指定 retransform entry</h2><p>需要指定 id</p><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>retransform <span class="token parameter variable">-d</span> <span class="token number">1</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h2 id="删除所有-retransform-entry" tabindex="-1"><a class="header-anchor" href="#删除所有-retransform-entry" aria-hidden="true">#</a> 删除所有 retransform entry</h2><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>retransform <span class="token parameter variable">--deleteAll</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h2 id="显式触发-retransform" tabindex="-1"><a class="header-anchor" href="#显式触发-retransform" aria-hidden="true">#</a> 显式触发 retransform</h2><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ retransform <span class="token parameter variable">--classPattern</span> demo.MathGame
retransform success, size: <span class="token number">1</span>, classes:
demo.MathGame
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>注意:对于同一个类,当存在多个 retransform entry 时,如果显式触发 retransform ,则最后添加的 entry 生效(id 最大的)。</p></blockquote><h2 id="消除-retransform-的影响" tabindex="-1"><a class="header-anchor" href="#消除-retransform-的影响" aria-hidden="true">#</a> 消除 retransform 的影响</h2><p>如果对某个类执行 retransform 之后,想消除影响,则需要:</p><ul><li>删除这个类对应的 retransform entry</li><li>重新触发 retransform</li></ul><div class="custom-container tip"><p class="custom-container-title">提示</p><p>如果不清除掉所有的 retransform entry并重新触发 retransform ,则 arthas stop 时retransform 过的类仍然生效。</p></div><h2 id="结合-jad-mc-命令使用" tabindex="-1"><a class="header-anchor" href="#结合-jad-mc-命令使用" aria-hidden="true">#</a> 结合 jad/mc 命令使用</h2><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>jad --source-only com.example.demo.arthas.user.UserController <span class="token operator">&gt;</span> /tmp/UserController.java
3 years ago
<span class="token function">mc</span> /tmp/UserController.java <span class="token parameter variable">-d</span> /tmp
retransform /tmp/com/example/demo/arthas/user/UserController.class
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>jad 命令反编译,然后可以用其它编译器,比如 vim 来修改源码</li><li>mc 命令来内存编译修改过的代码</li><li>用 retransform 命令加载新的字节码</li></ul><h2 id="上传-class-文件到服务器的技巧" tabindex="-1"><a class="header-anchor" href="#上传-class-文件到服务器的技巧" aria-hidden="true">#</a> 上传 .class 文件到服务器的技巧</h2><p>使用<code>mc</code>命令来编译<code>jad</code>的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用<code>base64</code>命令来绕过。</p><ol><li><p>在本地先转换<code>.class</code>文件为 base64再保存为 result.txt</p><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>base64 <span class="token operator">&lt;</span> Test.class <span class="token operator">&gt;</span> result.txt
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div></li><li><p>到服务器上,新建并编辑<code>result.txt</code>,复制本地的内容,粘贴再保存</p></li><li><p>把服务器上的 <code>result.txt</code>还原为<code>.class</code></p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>base64 -d &lt; result.txt &gt; Test.class
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div></li><li><p>用 md5 命令计算哈希值,校验是否一致</p></li></ol><h2 id="retransform-的限制" tabindex="-1"><a class="header-anchor" href="#retransform-的限制" aria-hidden="true">#</a> retransform 的限制</h2><ul><li>不允许新增加 field/method</li><li>正在跑的函数,没有退出不能生效,比如下面新增加的<code>System.out.println</code>,只有<code>run()</code>函数里的会生效</li></ul><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MathGame</span> <span class="token punctuation">{</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">InterruptedException</span> <span class="token punctuation">{</span>
<span class="token class-name">MathGame</span> game <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MathGame</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
game<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
3 years ago
<span class="token class-name">TimeUnit</span><span class="token punctuation">.</span><span class="token constant">SECONDS</span><span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 这个不生效,因为代码一直跑在 while里</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">&quot;in loop&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> <span class="token class-name">InterruptedException</span> <span class="token punctuation">{</span>
<span class="token comment">// 这个生效因为run()函数每次都可以完整结束</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">&quot;call run()&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{</span>
<span class="token keyword">int</span> number <span class="token operator">=</span> random<span class="token punctuation">.</span><span class="token function">nextInt</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token class-name">List</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">Integer</span><span class="token punctuation">&gt;</span></span> primeFactors <span class="token operator">=</span> <span class="token function">primeFactors</span><span class="token punctuation">(</span>number<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">print</span><span class="token punctuation">(</span>number<span class="token punctuation">,</span> primeFactors<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token class-name">System</span><span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token class-name">String</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string">&quot;illegalArgumentCount:%3d, &quot;</span><span class="token punctuation">,</span> illegalArgumentCount<span class="token punctuation">)</span> <span class="token operator">+</span> e<span class="token punctuation">.</span><span class="token function">getMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
3 years ago
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></div><!--[--><!--]--></div><footer class="page-meta right-menu-padding" data-v-fdd717e0><div class="meta-item edit-link"><a class="external-link meta-item-label" href="https://github.com/alibaba/arthas/edit/master/site/docs/doc/retransform.md" rel="noopener noreferrer" target="_blank" aria-label="在 GitHub 上编辑此页"><!--[--><!--]--><span>在 GitHub 上编辑此页</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></div><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="meta-item contributors"><span class="meta-item-label">贡献者: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: hengyunabc@gmail.com">hengyunabc</span><!--[-->, <!--]--><!--]--><!--[--><span class="contributor" title="email: i@fatpandac.com">Fatpandac</span><!----><!--]--><!--]--></span></div></footer><nav class="page-nav right-menu-padding" data-v-fdd717e0><p class="inner"><span class="prev"><a href="/doc/redefine.html" class="" aria-label="redefine"><!--[--><!--]--> redefine <!--[--><!--]--></a></span><span class="next"><a href="/doc/sc.html" class="" aria-label="sc"><!--[--><!--]--> sc <!--[--><!--]--></a></span></p></nav><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
3 years ago
<script type="module" src="/assets/app.b8f28394.js" defer></script>
</body>
</html>