怎么定位SDK内部的crash

今天碰到群里的大佬讲解,记录一波
我们经常会碰到给第三方写SDK的时候,那么,我们怎么定位SDK内部的crash?
如果使用 bugly,bugly会把合作方的crash 都给上报了,如果合作方很多,那crash量非常恐怖,而且,绝大多数都不是SDK的问题,如何排除接入方的crash ? 而只上报我们自己的?用类名判断行不行哦?如果我SDK类很多,做白名单吗?又或者,crash堆栈没有出现类名信息 怎么半?号了我直接说答案:内存定位技术。

我们制作的静态库 交给使用方,在加载到内存的时候,是连续的地址,我们只需要知道 我们静态库的起始地址以及结束地址,当出现任何crash的时候,我们捕获,然后对比crash的地址是否在 起始地址和结束地址之间,如果是,那就证明是我们自己的crash,如果不是,那就证明是合作方的问题。

现在的问题是如何知道 起始地址和结束地址
图一

看第一个文件和最后一个文件
确定起始地址和结束地址就界定了我们SDK得范围
出现在这个范围之内的crash 就是我们SDK的crash

获取地址的方式非常简单,只需要一个变量就ok
89501647310487_.pic.jpg

就是这个c函数本身地址,这个里面只有一个函数,这个函数的地址就是要的结果,剩下的就简单了,解析 crash堆栈,对比地址
[图片上传中...(89671647310625_.pic.jpg-b82887-1647311955620-0)]
89671647310625_.pic.jpg
89681647310640_.pic.jpg
89711647310690_.pic.jpg

还有一点要注意,begin文件一定要放在所有参与编译的文件的第一个位置,end 放在最后一位置

你可能感兴趣的:(怎么定位SDK内部的crash)