Tencent / matrix

Matrix is a plugin style, non-invasive APM system developed by WeChat.
Other
11.65k stars 1.89k forks source link

AppMethodBeat织入的结果不成对 #858

Open wsycomeon opened 1 year ago

wsycomeon commented 1 year ago

Issue /提问须知

在提交 issue 之前,我们应该先查询是否已经有相关的 issue 以及常见问题。提交 issue 时,我们需要写明 issue 的原因,以及编译或运行过程的日志。issue 需要以下面的格式:


异常类型:app 编译异常

matrix版本:如: 2.0.5

gradle版本:如: AGP 3.2.1、gradle 4.6

问题描述:如:在 android O 出现系统不兼容 

发现 matrix 两个比较明显的织入问题:i() 和 o() 没有保证 百分百配对。
就会导致,想要 在 i() o()两次 插桩 systrace 的想法,没办法实施,会 污染 systrace 的结果,误导分析。

1、一个待织入的方法体内,有概率出现 出现 两次 i() 织入,如下图:
本身 一个方法体内部:应该是 一个 i(),多个可能的出口 o 才对。

![image](https://github.com/Tencent/matrix/assets/15910433/a7d89ee6-baef-4a1f-aa64-96b31b1c485f)

2、matrix 对于 方法内部 api调用 因为异常导致中断跳出的场景,没有办法 织入 和前面的 i()  成对的 o();

![image](https://github.com/Tencent/matrix/assets/15910433/277c130a-864b-4e7f-bba1-7b04f6aeb403)
wsycomeon commented 1 year ago

em,怎么 图片不会自动上传。。。

我上面的描述,你们应该get到吧。。

本想通过 matrix插桩 配合 systrace 打tag的。。。 没想到 有bug啊。。。

wsycomeon commented 1 year ago

差点忘了这个事情,那天 想出来的 临时解决方案,方便 大家参考:

对于 织入出现问题的class,加入 黑名单 跳过,防止 systrace 污染。