watch 讓你能方便的觀察到指定方法的調用狀況。能觀察到的範圍爲:返回值
、拋出異常
、入參
,經過編寫 OGNL 表達式進行對應變量的查看。html
watch 的參數比較多,主要是由於它能在 4 個不一樣的場景觀察對象java
參數名稱 | 參數說明 |
---|---|
class-pattern | 類名錶達式匹配 |
method-pattern | 方法名錶達式匹配 |
express | 觀察表達式 |
condition-express | 條件表達式 |
[b] | 在方法調用以前觀察 |
[e] | 在方法異常以後觀察 |
[s] | 在方法返回以後觀察 |
[f] | 在方法結束以後(正常返回和異常返回)觀察 |
[E] | 開啓正則表達式匹配,默認爲通配符匹配 |
[x:] | 指定輸出結果的屬性遍歷深度,默認爲 1 |
[n:] | 命令執行次數 |
[#cost:] | 方法執行耗時 |
這裏重點要說明的是觀察表達式,觀察表達式的構成主要由 ognl 表達式組成,因此你能夠這樣寫"{params,returnObj}"
,只要是一個合法的 ognl 表達式,都能被正常支持。git
觀察的維度也比較多,主要體如今參數 advice 的數據結構上。Advice 參數最主要是封裝了通知節點的全部信息。請參考表達式核心變量中關於該節點的描述。github
特別說明:正則表達式
-b
方法調用前,-e
方法異常後,-s
方法返回後,-f
方法結束後-b
、-e
、-s
默認關閉,-f
默認打開,當指定觀察點被打開後,在相應事件點會對觀察表達式進行求值並輸出方法入參
和方法出參
的區別,有可能在中間被修改致使先後不一致,除了 -b
事件點 params
表明方法入參外,其他事件都表明方法出參-b
時,因爲觀察事件點是在方法調用前,此時返回值或異常均不存在$ watch demo.MathGame primeFactors "{params,target,returnObj}" "params[0] instanceof java.lang.Integer" -x 2 -b -s -n 2 Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 46 ms. ts=2018-12-03 19:29:54; [cost=0.01696ms] result=@ArrayList[ @Object[][ @Integer[1544665400], ], @MathGame[ random=@Random[java.util.Random@522b408a], illegalArgumentCount=@Integer[13038], ], null, ] ts=2018-12-03 19:29:54; [cost=4.277392ms] result=@ArrayList[ @Object[][ @Integer[1544665400], ], @MathGame[ random=@Random[java.util.Random@522b408a], illegalArgumentCount=@Integer[13038], ], @ArrayList[ @Integer[2], @Integer[2], @Integer[2], @Integer[5], @Integer[5], @Integer[73], @Integer[241], @Integer[439], ], ]
-n 2
,表示只執行兩次-s -b
的順序無關更多信息查看文檔:https://alibaba.github.io/arthas/watch.htmlexpress