</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><h4id="check-in-parameters"tabindex="-1"><aclass="header-anchor"href="#check-in-parameters"aria-hidden="true">#</a> Check <code>in parameters</code></h4><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> -x <spanclass="token number">2</span> -b
</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><h4id="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</h4><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> -x <spanclass="token number">2</span> -b -s -n <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><h4id="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</h4><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> -x <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><h4id="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</h4><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>
java.lang.IllegalArgumentException: number is: -1120397038, need <spanclass="token operator">>=</span><spanclass="token number">2</span>
at demo.MathGame.primeFactors<spanclass="token punctuation">(</span>MathGame.java:46<spanclass="token punctuation">)</span>
at demo.MathGame.run<spanclass="token punctuation">(</span>MathGame.java:24<spanclass="token punctuation">)</span>
at demo.MathGame.main<spanclass="token punctuation">(</span>MathGame.java:16<spanclass="token punctuation">)</span>
,
<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></div></div><ul><li><code>-e</code>: Trigger when an exception is thrown</li><li><code>throwExp</code>: the exception object</li></ul><h4id="filter-by-time-cost"tabindex="-1"><aclass="header-anchor"href="#filter-by-time-cost"aria-hidden="true">#</a> Filter by time cost</h4><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> -x <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><h4id="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</h4><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><h4id="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</h4><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> -v -n <spanclass="token number">1</span> -x <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><h4id="exclude-the-specified-class"tabindex="-1"><aclass="header-anchor"href="#exclude-the-specified-class"aria-hidden="true">#</a> Exclude the specified class</h4><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><h4id="does-not-match-subclass"tabindex="-1"><aclass="header-anchor"href="#does-not-match-subclass"aria-hidden="true">#</a> Does not match subclass</h4><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><h4id="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</h4><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'