uniquetruth / remote-debug-agent

a useful java agent for integration testing
Apache License 2.0
71 stars 25 forks source link

疑问:spring项目是怎么过滤掉跟spring相关方法的调用的 #12

Closed yang-yao closed 2 years ago

yang-yao commented 2 years ago

想问一下,如果是注入spring项目,那么调用链应该是从 springApplication的main开始吗 比如下面这样

[/CommitDiff111Application.main([Ljava/lang/String;)V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.CGLIB$STATICHOOK2()V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.CGLIB$STATICHOOK1()V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.CGLIB$SET_STATIC_CALLBACKS([Lorg/springframework/cglib/proxy/Callback;)V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.CGLIB$BIND_CALLBACKS(Ljava/lang/Object;)V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.setBeanFactory(Lorg/springframework/beans/factory/BeanFactory;)V] --->
[/CommitDiff111Application$$EnhancerBySpringCGLIB$$a14efe4d.setBeanFactory(Lorg/springframework/beans/factory/BeanFactory;)V] --->
[/service/impl/ProjectInfoServiceImpl$$EnhancerBySpringCGLIB$$d13cbcc2.CGLIB$STATICHOOK7()V] --->
[/service/impl/ProjectInfoServiceImpl$$EnhancerBySpringCGLIB$$d13cbcc2.setCallbacks([Lorg/springframework/cglib/proxy/Callback;)V] --->
[/service/impl/ProjectInfoServiceImpl$$EnhancerBySpringCGLIB$$d13cbcc2.isFrozen()Z] --->
[/service/impl/ProjectInfoServiceImpl$$EnhancerBySpringCGLIB$$d13cbcc2.getTargetClass()Ljava/lang/Class;] 

但是从获取到的调用链看到,您是过滤掉了这部分内容,想问一下是怎么过滤的

还有个问题,假设项目里依赖的第三方包的包前缀跟 项目业务代码包前缀一样 那么测试在执行业务逻辑代码的时候 ,肯定会走到依赖包,那么依赖包里的调用链也会跟业务方法一样返回吗? 还是说这部分也做了过滤

uniquetruth commented 2 years ago
  1. 1个调用链的起点是1个请求到达服务器,服务器的工作线程在处理这个请求时,走到的第一个includes范围内的方法。这跟应用启动没有关系,你说的SpringAppliacation.main是启动线程或者主线程执行的代码。请看一下wiki中关于调用链的解释。
  2. 依赖包里的调用链也会跟业务方法一样返回。