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/assets/watch.html.06497348.js

189 lines
47 KiB
JavaScript

import{_ as i,o as l,c as r,a as n,b as a,w as o,e as s,d as p,r as c}from"./app.5024572d.js";const u={},d=n("h1",{id:"watch",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#watch","aria-hidden":"true"},"#"),s(" watch")],-1),m={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=en&id=command-watch",target:"_blank",rel:"noopener noreferrer"},k=n("code",null,"watch",-1),v=s(" online tutorial"),b=n("p",null,[s("Monitor methods in data aspect including "),n("code",null,"return values"),s(", "),n("code",null,"exceptions"),s(" and "),n("code",null,"parameters"),s(".")],-1),h=s("With the help of "),g={href:"https://commons.apache.org/proper/commons-ognl/index.html",target:"_blank",rel:"noopener noreferrer"},f=s("OGNL"),x=s(", you can easily check the details of variables when methods being invoked."),_=p('<h2 id="parameters-options" tabindex="-1"><a class="header-anchor" href="#parameters-options" aria-hidden="true">#</a> Parameters &amp; Options</h2><p>There are four different scenarios for <code>watch</code> command, which makes it rather complicated.</p><table><thead><tr><th style="text-align:right;">Name</th><th style="text-align:left;">Specification</th></tr></thead><tbody><tr><td style="text-align:right;"><em>class-pattern</em></td><td style="text-align:left;">pattern for the class name</td></tr><tr><td style="text-align:right;"><em>method-pattern</em></td><td style="text-align:left;">pattern for the method name</td></tr><tr><td style="text-align:right;"><em>expression</em></td><td style="text-align:left;">expression to watch, default value <code>{params, target, returnObj}</code></td></tr><tr><td style="text-align:right;"><em>condition-expression</em></td><td style="text-align:left;">condition expression to filter</td></tr><tr><td style="text-align:right;">[b]</td><td style="text-align:left;">before method being invoked</td></tr><tr><td style="text-align:right;">[e]</td><td style="text-align:left;">when method encountering exceptions</td></tr><tr><td style="text-align:right;">[s]</td><td style="text-align:left;">when method exits normally</td></tr><tr><td style="text-align:right;">[f]</td><td style="text-align:left;">when method exits (either succeed or fail with exceptions)</td></tr><tr><td style="text-align:right;">[E]</td><td style="text-align:left;">turn on regex matching while the default is wildcard matching</td></tr><tr><td style="text-align:right;">[x:]</td><td style="text-align:left;">the depth to print the specified property with default value: 1, the max value is 4</td></tr><tr><td style="text-align:right;"><code>[m &lt;arg&gt;]</code></td><td style="text-align:left;">Specify the max number of matched Classes, the default value is 50. Long format is <code>[maxMatch &lt;arg&gt;]</code>.</td></tr></tbody></table><p>F.Y.I</p><ol><li>any valid OGNL expression as <code>&quot;{params,returnObj}&quot;</code> supported</li><li>there are four <em>watching</em> points: <code>-b</code>, <code>-e</code>, <code>-s</code> and <code>-f</code> (the first three are off in default while <code>-f</code> on);</li><li>at the <em>watching</em> point, Arthas will use the <em>expression</em> to evaluate the variables and print them out;</li><li><code>in parameters</code> and <code>out parameters</code> are different since they can be modified within the invoked methods; <code>params</code> stands for <code>in parameters</code> in <code>-b</code>while <code>out parameters</code> in other <em>watching</em> points;</li><li>there are no <code>return values</code> and <code>exceptions</code> when using <code>-b</code>.</li><li>In the result of the watch command, the <code>location</code> information will be printed. There are three possible values for <code>location</code>: <code>AtEnter</code>, <code>AtExit</code>, and <code>AtExceptionExit</code>. Corresponding to the method entry, the method returns normally, and the method throws an exception.</li></ol><p>Advanced:</p>',6),y=s("Critical fields in "),w=n("em",null,"expression",-1),I={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},A=s("Special usages"),C={href:"https://commons.apache.org/dormant/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},G=s("OGNL official guide"),j=n("h2",{id:"usage",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),s(" Usage")],-1),M=n("h3",{id:"start-demo",tabindex:"-1"},[n("a",{class:"header-anchor",href:"#start-demo","aria-hidden":"true"},"#"),s(" Start Demo")],-1),L=s("Start "),E=n("code",null,"math-game",-1),O=s(" in "),F=s("Quick Start"),q=s("."),T=p(`<h3 id="check-the-out-parameters-this-and-return-value" tabindex="-1"><a class="header-anchor" href="#check-the-out-parameters-this-and-return-value" aria-hidden="true">#</a> Check the <code>out parameters</code>, <code>this</code> and <code>return value</code></h3><div class="custom-container tip"><p class="custom-container-title">TIP</p><p>The expression to watch, default value <code>{params, target, returnObj}</code></p></div><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token parameter variable">-x</span> <span class="token number">2</span>
Press Q or Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class count: <span class="token number">1</span> , method count: <span class="token number">1</span><span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">32</span> ms, listenerId: <span class="token number">5</span>
<span class="token assign-left variable">method</span><span class="token operator">=</span>demo.MathGame.primeFactors <span class="token assign-left variable">location</span><span class="token operator">=</span>AtExceptionExit
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2021</span>-08-31 <span class="token number">15</span>:22:57<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.220625ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span>-179173<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>java.util.Random@31cefde0<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">44</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
null,
<span class="token punctuation">]</span>
<span class="token assign-left variable">method</span><span class="token operator">=</span>demo.MathGame.primeFactors <span class="token assign-left variable">location</span><span class="token operator">=</span>AtExit
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2021</span>-08-31 <span class="token number">15</span>:22:58<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">1</span>.020982ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>java.util.Random@31cefde0<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">44</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@ArrayList<span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">26947</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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 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>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><h3 id="specify-the-max-number-of-matched-classes" tabindex="-1"><a class="header-anchor" href="#specify-the-max-number-of-matched-classes" aria-hidden="true">#</a> Specify the max number of matched Classes</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token parameter variable">-m</span> <span class="token number">1</span>
Press Q or Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class count: <span class="token number">1</span> , method count: <span class="token number">1</span><span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">302</span> ms, listenerId: <span class="token number">3</span>
<span class="token assign-left variable">method</span><span class="token operator">=</span>demo.MathGame.primeFactors <span class="token assign-left variable">location</span><span class="token operator">=</span>AtExceptionExit
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2022</span>-12-25 <span class="token number">19</span>:58:41<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.222419ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>isEmpty<span class="token operator">=</span>false<span class="token punctuation">;</span><span class="token assign-left variable">size</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>demo.MathGame@3bf400<span class="token punctuation">]</span>,
null,
<span class="token punctuation">]</span>
<span class="token assign-left variable">method</span><span class="token operator">=</span>demo.MathGame.primeFactors <span class="token assign-left variable">location</span><span class="token operator">=</span>AtExceptionExit
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2022</span>-12-25 <span class="token number">19</span>:58:51<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.046928ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>isEmpty<span class="token operator">=</span>false<span class="token punctuation">;</span><span class="token assign-left variable">size</span><span class="token operator">=</span><span class="token number">1</span><span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>demo.MathGame@3bf400<span class="token punctuation">]</span>,
null,
<span class="token punctuation">]</span>
</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></div><h3 id="check-in-parameters" tabindex="-1"><a class="header-anchor" href="#check-in-parameters" aria-hidden="true">#</a> Check <code>in parameters</code></h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&quot;{params,returnObj}&quot;</span> <span class="token parameter variable">-x</span> <span class="token number">2</span> <span class="token parameter variable">-b</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">50</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:23:23<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.0353ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span>-1077465243<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
null,
<span class="token punctuation">]</span>
</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></div><p>Compared to the previous <em>check</em>:</p><ul><li><code>return value</code> is <code>null</code> since it&#39;s <code>-b</code>.</li></ul><h3 id="check-before-and-after-at-the-same-time" tabindex="-1"><a class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&quot;{params,target,returnObj}&quot;</span> <span class="token parameter variable">-x</span> <span class="token number">2</span> <span class="token parameter variable">-b</span> <span class="token parameter variable">-s</span> <span class="token parameter variable">-n</span> <span class="token number">2</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">46</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:29:54<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.01696ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>java.util.Random@522b408a<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">13038</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
null,
<span class="token punctuation">]</span>
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:29:54<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">4</span>.277392ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>java.util.Random@522b408a<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">13038</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@ArrayList<span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">73</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">241</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">439</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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 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><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><h3 id="use-x-to-check-more-details" tabindex="-1"><a class="header-anchor" href="#use-x-to-check-more-details" aria-hidden="true">#</a> Use <code>-x</code> to check more details</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&quot;{params,target}&quot;</span> <span class="token parameter variable">-x</span> <span class="token number">3</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">58</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:34:19<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.587833ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>
<span class="token assign-left variable">serialVersionUID</span><span class="token operator">=</span>@Long<span class="token punctuation">[</span><span class="token number">3905348978240129619</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">seed</span><span class="token operator">=</span>@AtomicLong<span class="token punctuation">[</span><span class="token number">3133719055989</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">multiplier</span><span class="token operator">=</span>@Long<span class="token punctuation">[</span><span class="token number">25214903917</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">addend</span><span class="token operator">=</span>@Long<span class="token punctuation">[</span><span class="token number">11</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">mask</span><span class="token operator">=</span>@Long<span class="token punctuation">[</span><span class="token number">281474976710655</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">DOUBLE_UNIT</span><span class="token operator">=</span>@Double<span class="token punctuation">[</span><span class="token number">1</span>.1102230246251565E-16<span class="token punctuation">]</span>,
<span class="token assign-left variable">BadBound</span><span class="token operator">=</span>@String<span class="token punctuation">[</span>bound must be positive<span class="token punctuation">]</span>,
<span class="token assign-left variable">BadRange</span><span class="token operator">=</span>@String<span class="token punctuation">[</span>bound must be greater than origin<span class="token punctuation">]</span>,
<span class="token assign-left variable">BadSize</span><span class="token operator">=</span>@String<span class="token punctuation">[</span>size must be non-negative<span class="token punctuation">]</span>,
<span class="token assign-left variable">seedUniquifier</span><span class="token operator">=</span>@AtomicLong<span class="token punctuation">[</span>-3282039941672302964<span class="token punctuation">]</span>,
<span class="token assign-left variable">nextNextGaussian</span><span class="token operator">=</span>@Double<span class="token punctuation">[</span><span class="token number">0.0</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">haveNextNextGaussian</span><span class="token operator">=</span>@Boolean<span class="token punctuation">[</span>false<span class="token punctuation">]</span>,
<span class="token assign-left variable">serialPersistentFields</span><span class="token operator">=</span>@ObjectStreamField<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>isEmpty<span class="token operator">=</span>false<span class="token punctuation">;</span><span class="token assign-left variable">size</span><span class="token operator">=</span><span class="token number">3</span><span class="token punctuation">]</span>,
<span class="token assign-left variable">unsafe</span><span class="token operator">=</span>@Unsafe<span class="token punctuation">[</span>sun.misc.Unsafe@2eaa1027<span class="token punctuation">]</span>,
<span class="token assign-left variable">seedOffset</span><span class="token operator">=</span>@Long<span class="token punctuation">[</span><span class="token number">24</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">13159</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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 class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="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><h3 id="use-condition-expressions-to-locate-specific-call" tabindex="-1"><a class="header-anchor" href="#use-condition-expressions-to-locate-specific-call" aria-hidden="true">#</a> Use condition expressions to locate specific call</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&quot;{params[0],target}&quot;</span> <span class="token string">&quot;params[0]&lt;0&quot;</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">68</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:36:04<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.530255ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span>-18178089<span class="token punctuation">]</span>,
@MathGame<span class="token punctuation">[</span>demo.MathGame@41cf53f9<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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><h3 id="check-exceptions" tabindex="-1"><a class="header-anchor" href="#check-exceptions" aria-hidden="true">#</a> Check <code>exceptions</code></h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&quot;{params[0],throwExp}&quot;</span> <span class="token parameter variable">-e</span> <span class="token parameter variable">-x</span> <span class="token number">2</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">62</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:38:00<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">1</span>.414993ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span>-1120397038<span class="token punctuation">]</span>,
java.lang.IllegalArgumentException: number is: -1120397038, need <span class="token operator">&gt;=</span> <span class="token number">2</span>
at demo.MathGame.primeFactors<span class="token punctuation">(</span>MathGame.java:46<span class="token punctuation">)</span>
at demo.MathGame.run<span class="token punctuation">(</span>MathGame.java:24<span class="token punctuation">)</span>
at demo.MathGame.main<span class="token punctuation">(</span>MathGame.java:16<span class="token punctuation">)</span>
,
<span class="token punctuation">]</span>
</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></div><ul><li><code>-e</code>\b: Trigger when an exception is thrown</li><li><code>throwExp</code>: the exception object</li></ul><h3 id="filter-by-time-cost" tabindex="-1"><a class="header-anchor" href="#filter-by-time-cost" aria-hidden="true">#</a> Filter by time cost</h3><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&#39;{params, returnObj}&#39;</span> <span class="token string">&#39;#cost&gt;200&#39;</span> <span class="token parameter variable">-x</span> <span class="token number">2</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">66</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:40:28<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">2112</span>.168897ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@ArrayList<span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">428379493</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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></div><ul><li><code>#cost&gt;200</code> (<code>ms</code>) filter out all invokings that take less than <code>200ms</code>.</li></ul><h3 id="check-the-field-of-the-target-object" tabindex="-1"><a class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&#39;target&#39;</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">52</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">19</span>:41:52<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.477882ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@MathGame<span class="token punctuation">[</span>
<span class="token assign-left variable">random</span><span class="token operator">=</span>@Random<span class="token punctuation">[</span>java.util.Random@522b408a<span class="token punctuation">]</span>,
<span class="token assign-left variable">illegalArgumentCount</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">13355</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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><ul><li><code>target.field_name</code>: the field of the current object.</li></ul><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>$ <span class="token function">watch</span> demo.MathGame primeFactors <span class="token string">&#39;target.illegalArgumentCount&#39;</span>
Press Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class-cnt:1 , method-cnt:1<span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">67</span> ms.
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">20</span>:04:34<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">131</span>.303498ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">]</span>
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2018</span>-12-03 <span class="token number">20</span>:04:35<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.961441ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@Integer<span class="token punctuation">[</span><span class="token number">8</span><span class="token punctuation">]</span>
</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><h3 id="get-a-static-field-and-calling-a-static-method" tabindex="-1"><a class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code><span class="token function">watch</span> demo.MathGame * <span class="token string">&#39;{params,@demo.MathGame@random.nextInt(100)}&#39;</span> <span class="token parameter variable">-v</span> <span class="token parameter variable">-n</span> <span class="token number">1</span> <span class="token parameter variable">-x</span> <span class="token number">2</span>
<span class="token punctuation">[</span>arthas@6527<span class="token punctuation">]</span>$ <span class="token function">watch</span> demo.MathGame * <span class="token string">&#39;{params,@demo.MathGame@random.nextInt(100)}&#39;</span> <span class="token parameter variable">-n</span> <span class="token number">1</span> <span class="token parameter variable">-x</span> <span class="token number">2</span>
Press Q or Ctrl+C to abort.
Affect<span class="token punctuation">(</span>class count: <span class="token number">1</span> , method count: <span class="token number">5</span><span class="token punctuation">)</span> cost <span class="token keyword">in</span> <span class="token number">34</span> ms, listenerId: <span class="token number">3</span>
<span class="token assign-left variable">ts</span><span class="token operator">=</span><span class="token number">2021</span>-01-05 <span class="token number">21</span>:35:20<span class="token punctuation">;</span> <span class="token punctuation">[</span>cost<span class="token operator">=</span><span class="token number">0</span>.173966ms<span class="token punctuation">]</span> <span class="token assign-left variable">result</span><span class="token operator">=</span>@ArrayList<span class="token punctuation">[</span>
@Object<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">[</span>
@Integer<span class="token punctuation">[</span>-138282<span class="token punctuation">]</span>,
<span class="token punctuation">]</span>,
@Integer<span class="token punctuation">[</span><span class="token number">89</span><span class="token punctuation">]</span>,
<span class="token punctuation">]</span>
</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></div>`,32),P=s("Note that here you use "),R=n("code",null,"Thread.currentThread().getContextClassLoader()",-1),N=s(" to load, and it is better to use the exact "),S=n("code",null,"classloader",-1),U=s(),$=s("ognl"),B=s("."),D=p(`<h3 id="exclude-the-specified-class" tabindex="-1"><a class="header-anchor" href="#exclude-the-specified-class" aria-hidden="true">#</a> Exclude the specified class</h3><div class="custom-container tip"><p class="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><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code><span class="token function">watch</span> javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="does-not-match-subclass" tabindex="-1"><a class="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&#39;t want to match, you can turn it off.</p><div class="language-bash ext-sh line-numbers-mode"><pre class="language-bash"><code>options disable-sub-class <span class="token boolean">true</span>
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h3 id="use-the-v-parameter-to-print-more-information" tabindex="-1"><a class="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><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>$ watch -v -x 2 demo.MathGame print &#39;params&#39; &#39;params[0] &gt; 100000&#39;
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 29 ms, listenerId: 11
Condition express: params[0] &gt; 100000 , result: false
Condition express: params[0] &gt; 100000 , result: false
Condition express: params[0] &gt; 100000 , result: true
ts=2020-12-02 22:38:56; [cost=0.060843ms] result=@Object[][
@Integer[1],
@ArrayList[
@Integer[200033],
],
]
Condition express: params[0] &gt; 100000 , result: true
ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
@Integer[1],
@ArrayList[
@Integer[29],
@Integer[4243],
],
]
</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></div>`,15);function z(Q,V){const e=c("ExternalLinkIcon"),t=c("RouterLink");return l(),r("div",null,[d,n("p",null,[n("a",m,[k,v,a(e)])]),b,n("p",null,[h,n("a",g,[f,a(e)]),x]),_,n("ul",null,[n("li",null,[a(t,{to:"/en/doc/advice-class.html"},{default:o(()=>[y,w]),_:1})]),n("li",null,[n("a",I,[A,a(e)])]),n("li",null,[n("a",C,[G,a(e)])])]),j,M,n("p",null,[L,E,O,a(t,{to:"/en/doc/quick-start.html"},{default:o(()=>[F]),_:1}),q]),T,n("ul",null,[n("li",null,[P,R,N,S,U,a(t,{to:"/en/doc/ognl.html"},{default:o(()=>[$]),_:1}),B])]),D])}const Y=i(u,[["render",z],["__file","watch.html.vue"]]);export{Y as default};