如何得知某个方法从执行到返回调用了哪些其他方法?

如果通过线程转储的方式,只能得到某个时间点的信息(不全面)。但是如果采用JVM监控工具抽样,寻找特定的某个方法之后的执行过程太过于麻烦,请问有其他方法吗?

阅读 2.6k
3 个回答

如果允许侵入源码,我建议直接打印日志,在日志中打印堆栈就可以了(建议这种信息打印到DEBUG级别)。

agent-监控来一发,侵入源码我觉得是绝对不允许的,这样会对业务有影响,同时不可能对所有对系统都做这种监控。
@Feng_Yu

方法调用其实就是一个入栈出栈的过程。线程转储只能看到方法的调用链(也就是说堆栈),因为调用链全部还全部保存在栈中的,B方法调用完成都已经出栈了,怎么还能得到B方法的信息呢?如果你要知道调用的所有方法,唯一的途径就是在调用方法时记录这次调用的信息(日志也是记录的一种方式),其实楼上也是这个意思。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题