今天碰到群里的大佬講解,記錄一波
我們經(jīng)常會碰到給第三方寫SDK的時候艰躺,那么撇寞,我們怎么定位SDK內(nèi)部的crash顿天?
如果使用 bugly,bugly會把合作方的crash 都給上報了蔑担,如果合作方很多牌废,那crash量非常恐怖啤握,而且鸟缕,絕大多數(shù)都不是SDK的問題,如何排除接入方的crash 排抬? 而只上報我們自己的叁扫?用類名判斷行不行哦三妈?如果我SDK類很多,做白名單嗎莫绣?又或者畴蒲,crash堆棧沒有出現(xiàn)類名信息 怎么半?號了我直接說答案:內(nèi)存定位技術(shù)对室。
我們制作的靜態(tài)庫 交給使用方模燥,在加載到內(nèi)存的時候,是連續(xù)的地址掩宜,我們只需要知道 我們靜態(tài)庫的起始地址以及結(jié)束地址蔫骂,當(dāng)出現(xiàn)任何crash的時候,我們捕獲牺汤,然后對比crash的地址是否在 起始地址和結(jié)束地址之間辽旋,如果是,那就證明是我們自己的crash檐迟,如果不是补胚,那就證明是合作方的問題。
看第一個文件和最后一個文件
確定起始地址和結(jié)束地址就界定了我們SDK得范圍
出現(xiàn)在這個范圍之內(nèi)的crash 就是我們SDK的crash
就是這個c函數(shù)本身地址,這個里面只有一個函數(shù)追迟,這個函數(shù)的地址就是要的結(jié)果,剩下的就簡單了,解析 crash堆棧溶其,對比地址
還有一點要注意,begin文件一定要放在所有參與編譯的文件的第一個位置,end 放在最后一位置