作為乙個安卓驅動開發,在和工廠溝通過程中經常收到機器在開機後直接進sysdump的問題反饋。最開始碰到這種問題,自己也基本上是滿臉問號。後來經過一些錯誤排查後逐漸有了處理經驗。在這裡做個簡單的分享。
下面以一次例項來講解:
問題描述:出現一台機器在系統啟動後不久就自己重啟進入sysdump介面。再次開機後大概率會繼續進入sysdump。
後面拿到了問題機器。
我們自己需要準備和異常機器使用韌體版本對應的vmlinux,另外還要準備好crash分析工具,由於機器時基於arm核心的,所以用的是crash_arm工具。
將sysdump檔案和vmlinux還有crash_arm複製到乙個資料夾中,方面後續操作:
執行命令將sysdump資訊解析出來:
1 cat sysdump.core.* > logcat
2 ./crash_arm vmlinux logcat
如果解析有異常,命令列裡面會有提示。解析成功後如下圖:
到這裡,我們可以看到顯示這個sysdump的問題是發生了空指標異常:
那現在知道了問題的原因,但是還不知道具體的問題點在**。這種問題屬於解決難度適中的情況。
更簡單下的情況下,sysdump解析出來的問題直接會指出問題出在哪個函式。而另外一種更麻煩的情況下,這裡解析出的錯誤可能會顯示為空,如果碰到這種情況就比較棘手。
回到這個問題本身,造成空指標異常的可能原因很多,因此我們需要進一步查詢原因。這是我一般先會將sysdump的log資訊匯出來。使用如下命令:
匯出後檢視這個檔案的內容。
我們在檔案中搜尋前面提到的問題原因:
從這裡我們可以看到很多暫存器的資訊。其中最重要的是pc暫存器的內容,
到這裡我們思路就很清晰了,通過檢視unlink_anon_vmas函式的彙編**,找到其中位於0x170偏移位址的**內容,就找到了問題的根本原因。
這時需要用到crash_arm工具,我們通過dis反彙編命令進行解析:
得到結果如下:
看到這密密麻麻的彙編**不要慫,上去跟他剛。
由於解析出來的彙編**偏移位址用的十進位制,所以0x170就對應上圖中最後紅色箭頭指出的這一行**。
為了驗證這個猜測,我們需要知道當下r2暫存器的值。這裡我們需要回到前面的這個:
那問題分析到這裡,我們已經知道了問題點,但是還不清楚為什麼會導致這個問題,下面還要接著分析:
現在就要結合問題點的**上下文來進行進一步分析了,既然是r2暫存器的內容不對,那麼我們需要檢視r2暫存器的值的**,通過彙編**可以看出:
0xc011eb94 : ldr r2, [r4, #8]
0xc011eb98 : str r3, [r2, #4]
」
群管機械人安卓免費 安卓開發studio安裝
做安卓開發的小夥伴們,google 將重新發力物聯網平台android things,android thing於2016年12月首次發布,是乙個面向智慧型裝置基於android系統的平台,在谷歌最初的設想中涵蓋小型機械人 藝術裝置 投影儀 3d印表機在內所有物聯網裝置,不過自上線兩年多來,僅有少量...
kindle安卓更新韌體 已經裝過安卓系統
具體步驟為 我的電腦 右鍵 屬性 高階 環境變數 在系統變數中找到path 不分大小寫 雙擊它 在其變數值 v 中新增 c windows system32 新增方法為 在原變數值後面加英文分號,接著分號後面貼上 c windows system32 就可以了,然後一路確定。電腦提示安裝驅動,則按照...
安卓系統檔案結構
這是公尺1的根目錄 adb連線的時候會有是否永久允許除錯,這個就是允許列表,根ssh rsa免登是一樣的。cache 系統快取,還有一些日誌檔案,看起來是比較底層的log,recovery和小公尺自用的adb。data anr dalvik cache data 系統做cache的資料庫 cache...