学习arthas(十一)输出方法调用栈

Arthas
placeholder image
admin 发布于:2023-10-01 22:23:56
阅读:loading


stack 命令用于查看指定类和方法的调用栈信息,即堆栈信息,包含方法调用链、堆栈深度等信息,用于追踪程序执行的调用路径,同时也可以帮助我们直观的查看某个类是怎么被调用执行的,特别是在分析一些开源项目的源码时,还是有一定的用武之地的。

1.基本介绍

调用栈信息包括每个线程的调用树,从最上层的方法开始,依次展示方法的调用关系。每个方法的信息包括类名、方法名、源码位置等。通常在方法抛出异常后,可以看到异常的堆栈信息,通过堆栈中异常的原因描述来定位异常所发生的位置和异常发生的原因,实际上对于正常运行的代码也是存在方法调用堆栈的,只不过通常情况下大家不会使用到,比如下列代码可获取到方法调用时的堆栈,参考如下:

public static void info(String message) {
      StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
      StackTraceElement callerStack = stackTraceElements[2]; // 获取调用者的栈帧
        
      String className = callerStack.getClassName();
      String methodName = callerStack.getMethodName();
      int lineNumber = callerStack.getLineNumber();

      System.out.println("[INFO] " + className + "#" + methodName + " at line " + lineNumber + ": " + message);
}

image.png

(输出方法调用堆栈)

image.png

(过滤输出堆栈)

image.png

(帮助文档)

2.其它说明

(1)与monitor命令一样,都支持同样的“condition-express”条件表达式用法,可参考本技术系列的教程方法执行结果监控章节;

(2)stack 命令只支持显示 Java 普通方法堆栈信息,不支持显示 Native 方法堆栈信息;

(3)如果要在 stack trace 中显示 Java 类的源代码行号,需要满足以下条件:

A 系统 java 源码必须存在;

B java 命令启动 JVM 时需要添加 -XX:+PrintCompilation 和 -XX:+LogCompilation 参数;



 点赞


 发表评论

当前回复:作者

 评论列表


留言区