返回

调试神器Arthas中的watch命令(上)

见解分享

在软件开发过程中,对代码进行调试是必不可少的,而对于Java程序来说,Arthas是一个强大的诊断工具。它提供了丰富的命令集,其中watch命令尤为重要,因为它可以让你轻松观察指定方法的调用情况。

watch命令详解

watch命令的官方定义如下:"让你能方便的观察到指定方法的调用情况。"它可以观察到的范围包括:

  • 返回值
  • 抛出的异常
  • 输入参数

通过编写OGNL表达式,你可以查看相应变量的值。

watch命令语法

watch命令的基本语法如下:

watch [options] <class-pattern> <method-pattern>

其中:

  • <class-pattern>:要监视的类的模式。可以使用通配符*或?。
  • <method-pattern>:要监视的方法的模式。可以使用通配符*或?。

watch命令选项

watch命令提供了丰富的选项,可以自定义观察行为。常用的选项包括:

  • -n <count>:指定要监视的调用次数。默认为1。
  • -v <expression>:指定要观察的OGNL表达式。默认为$arguments(输入参数)。
  • -e <expression>:指定在方法调用时要执行的OGNL表达式。
  • -x <filter-expression>:指定用于过滤观察结果的OGNL表达式。
  • -d <dump-file>:指定将观察结果转储到文件。

watch命令OGNL表达式

OGNL表达式是一种强大的表达式语言,可用于访问Java对象和属性。在watch命令中,OGNL表达式用于指定要观察的变量或执行的操作。

常用的OGNL表达式包括:

  • $arguments:方法的输入参数。
  • $result:方法的返回值。
  • $exception:方法抛出的异常。
  • $this:指向方法所属对象的引用。

watch命令示例

以下是一些watch命令示例:

# 观察System.out.println()方法的调用情况
watch java.lang.System.out.println

# 观察OrderService.getOrder()方法的返回值
watch com.example.OrderService.getOrder -v $result

# 观察UserService.login()方法的异常情况
watch com.example.UserService.login -e $exception

# 观察所有以Service结尾的类的所有以get开头的方法的调用情况
watch *Service.*get*

总结

watch命令是Arthas中一个非常有用的命令,它可以帮助你轻松观察指定方法的调用情况。通过灵活的选项和强大的OGNL表达式,watch命令可以满足各种调试需求。掌握watch命令的使用,将极大地提高你的Java调试效率。