import{_ as c,o as i,c as r,a as s,b as a,w as o,e as n,d as e,r as l}from"./app.391b0e4e.js";const u={},d=s("h1",{id:"watch",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#watch","aria-hidden":"true"},"#"),n(" watch")],-1),k={href:"https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=command-watch",target:"_blank",rel:"noopener noreferrer"},m=s("code",null,"watch",-1),v=n("\u5728\u7EBF\u6559\u7A0B"),b=e('

\u63D0\u793A

\u51FD\u6570\u6267\u884C\u6570\u636E\u89C2\u6D4B

\u8BA9\u4F60\u80FD\u65B9\u4FBF\u7684\u89C2\u5BDF\u5230\u6307\u5B9A\u51FD\u6570\u7684\u8C03\u7528\u60C5\u51B5\u3002\u80FD\u89C2\u5BDF\u5230\u7684\u8303\u56F4\u4E3A\uFF1A\u8FD4\u56DE\u503C\u3001\u629B\u51FA\u5F02\u5E38\u3001\u5165\u53C2\uFF0C\u901A\u8FC7\u7F16\u5199 OGNL \u8868\u8FBE\u5F0F\u8FDB\u884C\u5BF9\u5E94\u53D8\u91CF\u7684\u67E5\u770B\u3002

\u53C2\u6570\u8BF4\u660E

watch \u7684\u53C2\u6570\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u662F\u56E0\u4E3A\u5B83\u80FD\u5728 4 \u4E2A\u4E0D\u540C\u7684\u573A\u666F\u89C2\u5BDF\u5BF9\u8C61

\u53C2\u6570\u540D\u79F0\u53C2\u6570\u8BF4\u660E
class-pattern\u7C7B\u540D\u8868\u8FBE\u5F0F\u5339\u914D
method-pattern\u51FD\u6570\u540D\u8868\u8FBE\u5F0F\u5339\u914D
express\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\uFF1A{params, target, returnObj}
condition-express\u6761\u4EF6\u8868\u8FBE\u5F0F
[b]\u5728\u51FD\u6570\u8C03\u7528\u4E4B\u524D\u89C2\u5BDF
[e]\u5728\u51FD\u6570\u5F02\u5E38\u4E4B\u540E\u89C2\u5BDF
[s]\u5728\u51FD\u6570\u8FD4\u56DE\u4E4B\u540E\u89C2\u5BDF
[f]\u5728\u51FD\u6570\u7ED3\u675F\u4E4B\u540E(\u6B63\u5E38\u8FD4\u56DE\u548C\u5F02\u5E38\u8FD4\u56DE)\u89C2\u5BDF
[E]\u5F00\u542F\u6B63\u5219\u8868\u8FBE\u5F0F\u5339\u914D\uFF0C\u9ED8\u8BA4\u4E3A\u901A\u914D\u7B26\u5339\u914D
[x:]\u6307\u5B9A\u8F93\u51FA\u7ED3\u679C\u7684\u5C5E\u6027\u904D\u5386\u6DF1\u5EA6\uFF0C\u9ED8\u8BA4\u4E3A 1\uFF0C\u6700\u5927\u503C\u662F 4

\u8FD9\u91CC\u91CD\u70B9\u8981\u8BF4\u660E\u7684\u662F\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u89C2\u5BDF\u8868\u8FBE\u5F0F\u7684\u6784\u6210\u4E3B\u8981\u7531 ognl \u8868\u8FBE\u5F0F\u7EC4\u6210\uFF0C\u6240\u4EE5\u4F60\u53EF\u4EE5\u8FD9\u6837\u5199"{params,returnObj}"\uFF0C\u53EA\u8981\u662F\u4E00\u4E2A\u5408\u6CD5\u7684 ognl \u8868\u8FBE\u5F0F\uFF0C\u90FD\u80FD\u88AB\u6B63\u5E38\u652F\u6301\u3002

',6),h=n("\u89C2\u5BDF\u7684\u7EF4\u5EA6\u4E5F\u6BD4\u8F83\u591A\uFF0C\u4E3B\u8981\u4F53\u73B0\u5728\u53C2\u6570 "),g=s("code",null,"advice",-1),f=n(" \u7684\u6570\u636E\u7ED3\u6784\u4E0A\u3002"),x=s("code",null,"Advice",-1),_=n(" \u53C2\u6570\u6700\u4E3B\u8981\u662F\u5C01\u88C5\u4E86\u901A\u77E5\u8282\u70B9\u7684\u6240\u6709\u4FE1\u606F\u3002\u8BF7\u53C2\u8003"),y=n("\u8868\u8FBE\u5F0F\u6838\u5FC3\u53D8\u91CF"),I=n("\u4E2D\u5173\u4E8E\u8BE5\u8282\u70B9\u7684\u63CF\u8FF0\u3002"),A=n("\u7279\u6B8A\u7528\u6CD5\u8BF7\u53C2\u8003\uFF1A"),w={href:"https://github.com/alibaba/arthas/issues/71",target:"_blank",rel:"noopener noreferrer"},C=n("https://github.com/alibaba/arthas/issues/71"),G=n("OGNL \u8868\u8FBE\u5F0F\u5B98\u7F51\uFF1A"),L={href:"https://commons.apache.org/proper/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"},M=n("https://commons.apache.org/proper/commons-ognl/language-guide.html"),j=e('

\u7279\u522B\u8BF4\u660E\uFF1A

\u4F7F\u7528\u53C2\u8003

\u542F\u52A8 Demo

',4),O=n("\u542F\u52A8"),E=n("\u5FEB\u901F\u5165\u95E8"),q=n("\u91CC\u7684"),F=s("code",null,"math-game",-1),R=n("\u3002"),P=e(`

\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u8FD4\u56DE\u65F6\u7684\u53C2\u6570\u3001this \u5BF9\u8C61\u548C\u8FD4\u56DE\u503C

\u63D0\u793A

\u89C2\u5BDF\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u503C\u662F{params, target, returnObj}

$ watch demo.MathGame primeFactors -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 32 ms, listenerId: 5
method=demo.MathGame.primeFactors location=AtExceptionExit
ts=2021-08-31 15:22:57; [cost=0.220625ms] result=@ArrayList[
    @Object[][
        @Integer[-179173],
    ],
    @MathGame[
        random=@Random[java.util.Random@31cefde0],
        illegalArgumentCount=@Integer[44],
    ],
    null,
]
method=demo.MathGame.primeFactors location=AtExit
ts=2021-08-31 15:22:58; [cost=1.020982ms] result=@ArrayList[
    @Object[][
        @Integer[1],
    ],
    @MathGame[
        random=@Random[java.util.Random@31cefde0],
        illegalArgumentCount=@Integer[44],
    ],
    @ArrayList[
        @Integer[2],
        @Integer[2],
        @Integer[26947],
    ],
]

\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u5165\u53E3\u7684\u53C2\u6570\u548C\u8FD4\u56DE\u503C

$ watch demo.MathGame primeFactors "{params,returnObj}" -x 2 -b
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 50 ms.
ts=2018-12-03 19:23:23; [cost=0.0353ms] result=@ArrayList[
    @Object[][
        @Integer[-1077465243],
    ],
    null,
]

\u540C\u65F6\u89C2\u5BDF\u51FD\u6570\u8C03\u7528\u524D\u548C\u51FD\u6570\u8FD4\u56DE\u540E

$ watch demo.MathGame primeFactors "{params,target,returnObj}" -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[1],
    ],
    @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[1],
    ],
    @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],
    ],
]

\u8C03\u6574-x\u7684\u503C\uFF0C\u89C2\u5BDF\u5177\u4F53\u7684\u51FD\u6570\u53C2\u6570\u503C

$ watch demo.MathGame primeFactors "{params,target}" -x 3
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 58 ms.
ts=2018-12-03 19:34:19; [cost=0.587833ms] result=@ArrayList[
    @Object[][
        @Integer[1],
    ],
    @MathGame[
        random=@Random[
            serialVersionUID=@Long[3905348978240129619],
            seed=@AtomicLong[3133719055989],
            multiplier=@Long[25214903917],
            addend=@Long[11],
            mask=@Long[281474976710655],
            DOUBLE_UNIT=@Double[1.1102230246251565E-16],
            BadBound=@String[bound must be positive],
            BadRange=@String[bound must be greater than origin],
            BadSize=@String[size must be non-negative],
            seedUniquifier=@AtomicLong[-3282039941672302964],
            nextNextGaussian=@Double[0.0],
            haveNextNextGaussian=@Boolean[false],
            serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3],
            unsafe=@Unsafe[sun.misc.Unsafe@2eaa1027],
            seedOffset=@Long[24],
        ],
        illegalArgumentCount=@Integer[13159],
    ],
]

\u6761\u4EF6\u8868\u8FBE\u5F0F\u7684\u4F8B\u5B50

$ watch demo.MathGame primeFactors "{params[0],target}" "params[0]<0"
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 68 ms.
ts=2018-12-03 19:36:04; [cost=0.530255ms] result=@ArrayList[
    @Integer[-18178089],
    @MathGame[demo.MathGame@41cf53f9],
]

\u89C2\u5BDF\u5F02\u5E38\u4FE1\u606F\u7684\u4F8B\u5B50

$ watch demo.MathGame primeFactors "{params[0],throwExp}" -e -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 62 ms.
ts=2018-12-03 19:38:00; [cost=1.414993ms] result=@ArrayList[
    @Integer[-1120397038],
    java.lang.IllegalArgumentException: number is: -1120397038, need >= 2
	at demo.MathGame.primeFactors(MathGame.java:46)
	at demo.MathGame.run(MathGame.java:24)
	at demo.MathGame.main(MathGame.java:16)
,
]

\u6309\u7167\u8017\u65F6\u8FDB\u884C\u8FC7\u6EE4

$ watch demo.MathGame primeFactors '{params, returnObj}' '#cost>200' -x 2
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.
ts=2018-12-03 19:40:28; [cost=2112.168897ms] result=@ArrayList[
    @Object[][
        @Integer[1],
    ],
    @ArrayList[
        @Integer[5],
        @Integer[428379493],
    ],
]

\u89C2\u5BDF\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027

\u5982\u679C\u60F3\u67E5\u770B\u51FD\u6570\u8FD0\u884C\u524D\u540E\uFF0C\u5F53\u524D\u5BF9\u8C61\u4E2D\u7684\u5C5E\u6027\uFF0C\u53EF\u4EE5\u4F7F\u7528target\u5173\u952E\u5B57\uFF0C\u4EE3\u8868\u5F53\u524D\u5BF9\u8C61

$ watch demo.MathGame primeFactors 'target'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 52 ms.
ts=2018-12-03 19:41:52; [cost=0.477882ms] result=@MathGame[
    random=@Random[java.util.Random@522b408a],
    illegalArgumentCount=@Integer[13355],
]

\u7136\u540E\u4F7F\u7528target.field_name\u8BBF\u95EE\u5F53\u524D\u5BF9\u8C61\u7684\u67D0\u4E2A\u5C5E\u6027

$ watch demo.MathGame primeFactors 'target.illegalArgumentCount'
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 67 ms.
ts=2018-12-03 20:04:34; [cost=131.303498ms] result=@Integer[8]
ts=2018-12-03 20:04:35; [cost=0.961441ms] result=@Integer[8]

\u83B7\u53D6\u7C7B\u7684\u9759\u6001\u5B57\u6BB5\u3001\u8C03\u7528\u7C7B\u7684\u9759\u6001\u51FD\u6570\u7684\u4F8B\u5B50

watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -v -n 1 -x 2
[arthas@6527]$ watch demo.MathGame * '{params,@demo.MathGame@random.nextInt(100)}' -n 1 -x 2
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 5) cost in 34 ms, listenerId: 3
ts=2021-01-05 21:35:20; [cost=0.173966ms] result=@ArrayList[
    @Object[][
        @Integer[-138282],
    ],
    @Integer[89],
]
`,29),$=n("\u6CE8\u610F\u8FD9\u91CC\u4F7F\u7528 "),N=s("code",null,"Thread.currentThread().getContextClassLoader()",-1),B=n(" \u52A0\u8F7D,\u4F7F\u7528\u7CBE\u786E"),S=s("code",null,"classloader",-1),U=n(),D=n("ognl"),T=n("\u66F4\u597D\u3002"),V=e(`

\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B

\u63D0\u793A

watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 --exclude-class-pattern \u53C2\u6570

\u4F7F\u7528 --exclude-class-pattern \u53C2\u6570\u53EF\u4EE5\u6392\u9664\u6389\u6307\u5B9A\u7684\u7C7B\uFF0C\u6BD4\u5982\uFF1A

watch javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter

\u4E0D\u5339\u914D\u5B50\u7C7B

\u9ED8\u8BA4\u60C5\u51B5\u4E0B watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u4F1A\u5339\u914D\u5B50\u7C7B\u3002\u5982\u679C\u60F3\u4E0D\u5339\u914D\uFF0C\u53EF\u4EE5\u901A\u8FC7\u5168\u5C40\u53C2\u6570\u5173\u6389\u3002

options disable-sub-class true

\u4F7F\u7528 -v \u53C2\u6570\u6253\u5370\u66F4\u591A\u4FE1\u606F

\u63D0\u793A

watch/trace/monitor/stack/tt \u547D\u4EE4\u90FD\u652F\u6301 -v \u53C2\u6570

\u5F53\u547D\u4EE4\u6267\u884C\u4E4B\u540E\uFF0C\u6CA1\u6709\u8F93\u51FA\u7ED3\u679C\u3002\u6709\u4E24\u79CD\u53EF\u80FD\uFF1A

  1. \u5339\u914D\u5230\u7684\u51FD\u6570\u6CA1\u6709\u88AB\u6267\u884C
  2. \u6761\u4EF6\u8868\u8FBE\u5F0F\u7ED3\u679C\u662F false

\u4F46\u7528\u6237\u533A\u5206\u4E0D\u51FA\u662F\u54EA\u79CD\u60C5\u51B5\u3002

\u4F7F\u7528 -v\u9009\u9879\uFF0C\u5219\u4F1A\u6253\u5370Condition express\u7684\u5177\u4F53\u503C\u548C\u6267\u884C\u7ED3\u679C\uFF0C\u65B9\u4FBF\u786E\u8BA4\u3002

\u6BD4\u5982\uFF1A

$ watch -v -x 2 demo.MathGame print 'params' 'params[0] > 100000'
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 29 ms, listenerId: 11
Condition express: params[0] > 100000 , result: false
Condition express: params[0] > 100000 , result: false
Condition express: params[0] > 100000 , result: true
ts=2020-12-02 22:38:56; [cost=0.060843ms] result=@Object[][
    @Integer[200033],
    @ArrayList[
        @Integer[200033],
    ],
]
Condition express: params[0] > 100000 , result: true
ts=2020-12-02 22:38:57; [cost=0.052877ms] result=@Object[][
    @Integer[123047],
    @ArrayList[
        @Integer[29],
        @Integer[4243],
    ],
]
`,15);function z(Q,H){const t=l("ExternalLinkIcon"),p=l("RouterLink");return i(),r("div",null,[d,s("p",null,[s("a",k,[m,v,a(t)])]),b,s("p",null,[h,g,f,x,_,a(p,{to:"/doc/advice-class.html"},{default:o(()=>[y]),_:1}),I]),s("ul",null,[s("li",null,[A,s("a",w,[C,a(t)])]),s("li",null,[G,s("a",L,[M,a(t)])])]),j,s("p",null,[O,a(p,{to:"/doc/quick-start.html"},{default:o(()=>[E]),_:1}),q,F,R]),P,s("ul",null,[s("li",null,[$,N,B,S,U,a(p,{to:"/doc/ognl.html"},{default:o(()=>[D]),_:1}),T])]),V])}var K=c(u,[["render",z],["__file","watch.html.vue"]]);export{K as default};