記一次adb查找安卓App崩潰報錯記錄
首先先說結(jié)論,是因為內(nèi)存不足的時候會出現(xiàn)這種問題
在小米手機上有這么一個設置
可以很方面的模擬出這個異常
然后我們再設置一下logcat日志的大小
如果你的操作真的很多,最好設置一下,如果你的操作很短就可以復現(xiàn),那就沒必要調(diào)整,256k足矣
然后就是手機連接電腦
然后打開命令行工具清空logcat日志
adb logcat -c
然后查看日志
#需要打印時間和級別是Error的信息
adb logcat -v time *:E
這里只是在cmd上打印日志,很快,你可能來不及,那就下載日志,不是已經(jīng)清理了之前的日志么,我們再執(zhí)行命令
adb logcat -v time >C:/Users/EDY/Desktop/work/logcat.txt
這個時候就會把logcat日志傳輸?shù)奖镜兀亲⒁?,等你操作完了,就可以關(guān)閉adb窗口了,要不然他會一直往windows本地的文件里寫入日志,關(guān)閉后就不寫入了
然后搜索“FATAL”關(guān)鍵字
就可以定位到錯誤信息了,至于真正的錯誤原因,就得讓開發(fā)看了
如果你遇到了ANR
那還得看trace日志
以小米手機為例子
可能遇到兩個問題
一個是大家都說adb pull /data/anr/traces.txt
但是自己去pull的時候報錯
那是因為不同的手機廠商他的文件命名可能不同
但是我們也不清楚哪個是我們要的文件,那我們就嘗試先pull一個,發(fā)現(xiàn)了第二個問題,權(quán)限不足,那就可以使用
adb bugreport
他會告訴你把文件放到哪里了
然后解壓,再解壓后的文件里就有anr目錄下所有的東西了
怎么確定哪個文件是我們需要的,我們可以根據(jù)日志的時間來看,看哪個是你操作的時間附近
打開之后,看看是不是你的包報的錯誤
怎么確定報錯信息在哪里
下面的內(nèi)容是我抄的
首先,我們可以根據(jù)發(fā)生ANR的app包名和時間能確定ANR日志的地方,通常是再traces內(nèi)容的最上面。
然后ANR必然是主線程異常,我們可以找到"main"線程部分,查看main線程相關(guān)狀態(tài)。
可以很明確的看到主線程sleeping了,通常在多線程開發(fā)中,比較容易遇到的是blocked狀態(tài)導致的ANR
其次我們可以繼續(xù)找到下面的線程調(diào)用棧信息
這塊我們就比較熟悉,和查看普通的異常一樣,可以很明確的知道ANR 發(fā)生在MainActivity 28行處,原因是Thread.sleep(),此時我們再回到上面自己的代碼層面,結(jié)果已經(jīng)很明確。
當然,實際開發(fā)中的ANR通常不會這么簡單,有些也沒那么容易分析,這個就需要大家通過此篇文章的借鑒,結(jié)合實際開發(fā)多分析,多優(yōu)化來增長自己的能力。
線程狀態(tài)
對于上述線程狀態(tài),相對于java線程狀態(tài),Linux細化了很多狀態(tài),這樣更便于分析當前的狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-420542.html
java中的線程和操作系統(tǒng)內(nèi)核中的線程并不是等價關(guān)系。他們之間存在著映射關(guān)系,對Android來說,java中的線程和內(nèi)核的線程是一對一關(guān)系。文章來源地址http://www.zghlxwxcb.cn/news/detail-420542.html
到了這里,關(guān)于記一次adb查找安卓App崩潰報錯記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!