</script><metaname="aes-config"content="pid=xux-opensource&user_type=101&uid=&username=&dim10=arthas"><scriptsrc="//g.alicdn.com/alilog/mlog/aplus_v2.js"id="beacon-aplus"exparams="clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"></script><scriptsrc="//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>watch | arthas</title><metaname="description"content="arthas user document">
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li>In the above result, the method is executed twice, the first result is <code>location=AtExceptionExit</code>, indicating that the method throws an exception, so <code>returnObj</code> is null</li><li>In the second result is <code>location=AtExit</code>, indicating that the method returns normally, so you can see that the result of <code>returnObj</code> is an ArrayList</li></ul><h3id="check-in-parameters"tabindex="-1"><aclass="header-anchor"href="#check-in-parameters"aria-hidden="true">#</a> Check <code>in parameters</code></h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">"{params,returnObj}"</span><spanclass="token parameter variable">-x</span><spanclass="token number">2</span><spanclass="token parameter variable">-b</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><p>Compared to the previous <em>check</em>:</p><ul><li><code>return value</code> is <code>null</code> since it's <code>-b</code>.</li></ul><h3id="check-before-and-after-at-the-same-time"tabindex="-1"><aclass="header-anchor"href="#check-before-and-after-at-the-same-time"aria-hidden="true">#</a> Check <em>before</em> and <em>after</em> at the same time</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">"{params,target,returnObj}"</span><spanclass="token parameter variable">-x</span><spanclass="token number">2</span><spanclass="token parameter variable">-b</span><spanclass="token parameter variable">-s</span><spanclass="token parameter variable">-n</span><spanclass="token number">2</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><p>F.Y.I</p><ul><li><code>-n 2</code>: threshold of execution times is 2.</li><li>the first block of output is the <em>before watching</em> point;</li><li>*the order of the output determined by the *watching* order itself (nothing to do with the order of the options <code>-b -s</code>).</li></ul><h3id="use-x-to-check-more-details"tabindex="-1"><aclass="header-anchor"href="#use-x-to-check-more-details"aria-hidden="true">#</a> Use <code>-x</code> to check more details</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">"{params,target}"</span><spanclass="token parameter variable">-x</span><spanclass="token number">3</span>
<spanclass="token assign-left variable">BadBound</span><spanclass="token operator">=</span>@String<spanclass="token punctuation">[</span>bound must be positive<spanclass="token punctuation">]</span>,
<spanclass="token assign-left variable">BadRange</span><spanclass="token operator">=</span>@String<spanclass="token punctuation">[</span>bound must be greater than origin<spanclass="token punctuation">]</span>,
<spanclass="token assign-left variable">BadSize</span><spanclass="token operator">=</span>@String<spanclass="token punctuation">[</span>size must be non-negative<spanclass="token punctuation">]</span>,
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li><code>-x</code>: Expand level of object (1 by default)</li><li>The max value of <code>-x</code> is 4, to prevent the expansion result taking up too much memory. Users can specify the field in the <code>ognl</code> expression.</li></ul><h3id="use-condition-expressions-to-locate-specific-call"tabindex="-1"><aclass="header-anchor"href="#use-condition-expressions-to-locate-specific-call"aria-hidden="true">#</a> Use condition expressions to locate specific call</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">"{params[0],target}"</span><spanclass="token string">"params[0]<0"</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li><code>-e</code>: Trigger when an exception is thrown</li><li><code>throwExp</code>: the exception object</li></ul><h3id="filter-by-time-cost"tabindex="-1"><aclass="header-anchor"href="#filter-by-time-cost"aria-hidden="true">#</a> Filter by time cost</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">'{params, returnObj}'</span><spanclass="token string">'#cost>200'</span><spanclass="token parameter variable">-x</span><spanclass="token number">2</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li><code>#cost>200</code> (<code>ms</code>) filter out all invokings that take less than <code>200ms</code>.</li></ul><h3id="check-the-field-of-the-target-object"tabindex="-1"><aclass="header-anchor"href="#check-the-field-of-the-target-object"aria-hidden="true">#</a> Check the field of the target object</h3><ul><li><code>target</code> is the <code>this</code> object in java.</li></ul><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">'target'</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li><code>target.field_name</code>: the field of the current object.</li></ul><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>$ <spanclass="token function">watch</span> demo.MathGame primeFactors <spanclass="token string">'target.illegalArgumentCount'</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><h3id="get-a-static-field-and-calling-a-static-method"tabindex="-1"><aclass="header-anchor"href="#get-a-static-field-and-calling-a-static-method"aria-hidden="true">#</a> Get a static field and calling a static method</h3><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code><spanclass="token function">watch</span> demo.MathGame * <spanclass="token string">'{params,@demo.MathGame@random.nextInt(100)}'</span><spanclass="token parameter variable">-v</span><spanclass="token parameter variable">-n</span><spanclass="token number">1</span><spanclass="token parameter variable">-x</span><spanclass="token number">2</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div><divclass="line-number"></div></div></div><ul><li>Note that here you use <code>Thread.currentThread().getContextClassLoader()</code> to load, and it is better to use the exact <code>classloader</code><ahref="/en/doc/ognl.html"class="">ognl</a>.</li></ul><h3id="exclude-the-specified-class"tabindex="-1"><aclass="header-anchor"href="#exclude-the-specified-class"aria-hidden="true">#</a> Exclude the specified class</h3><divclass="custom-container tip"><pclass="custom-container-title">TIP</p><p>The watch/trace/monitor/stack/tt commands all support the <code>--exclude-class-pattern</code> parameter</p></div><p>Use the <code>--exclude-class-pattern</code> parameter to exclude the specified class, for example:</p><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code><spanclass="token function">watch</span> javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div></div></div><h3id="does-not-match-subclass"tabindex="-1"><aclass="header-anchor"href="#does-not-match-subclass"aria-hidden="true">#</a> Does not match subclass</h3><p>By default, the watch/trace/monitor/stack/tt commands will match subclass. If you don't want to match, you can turn it off.</p><divclass="language-bash ext-sh line-numbers-mode"><preclass="language-bash"><code>options disable-sub-class <spanclass="token boolean">true</span>
</code></pre><divclass="line-numbers"aria-hidden="true"><divclass="line-number"></div></div></div><h3id="use-the-v-parameter-to-print-more-information"tabindex="-1"><aclass="header-anchor"href="#use-the-v-parameter-to-print-more-information"aria-hidden="true">#</a> Use the -v parameter to print more information</h3><blockquote><p>The watch/trace/monitor/stack/tt commands all support the <code>-v</code> parameter.</p></blockquote><p>When the command is executed, there is no output result. There are two possibilities:</p><ol><li>The matched function is not executed</li><li>The result of the conditional expression is false</li></ol><p>But the user cannot tell which situation is.</p><p>Using the <code>-v</code> option, the specific value and execution result of <code>Condition express</code> will be printed for easy confirmation.</p><p>such as:</p><divclass="language-text ext-text line-numbers-mode"><preclass="language-text"><code>$ watch -v -x 2 demo.MathGame print 'params''params[0] > 100000'