Android的native可執行程式段錯誤跟蹤和解決
週末碰到一個問題,Android可執行程式段錯誤,如何定位呢。仔細檢視段錯誤如下
...
1-07 06:10:29.240: I/DEBUG(2319): backtrace:
01-07 06:10:29.240: I/DEBUG(2319): #00 pc 0001ce38 /system/lib/libc.so (memcpy+112)
01-07 06:10:29.240: I/DEBUG(2319): #01 pc 00001ef7 /system/lib/KDrvService
01-07 06:10:29.240: I/DEBUG(2319): #02 pc 0000166b /system/lib/KDrvService
01-07 06:10:29.240: I/DEBUG(2319): #03 pc 0000ca78 /system/lib/libc.so (__thread_entry+72)
01-07 06:10:29.240: I/DEBUG(2319): #04 pc 0000cbf4 /system/lib/libc.so (pthread_create+208)
...
對照函式MAP檔案發現是某函式中的memcpy導致的問題。
基本斷定是memcpy導致的段錯誤,瀏覽程式碼發現如下錯誤:
memcpy(buf+offset, length, length);
修改為:
memcpy(buf+offset, buffer, length);
解決問題。
解決問題的思路有多種:
1. 程式碼審查,對於出現問題前,可以通過程式碼審,減少BUG數量。
2. 除錯跟蹤,開發過程中通過除錯跟蹤,能更快定位問題所在。
3. 依賴系統輸出的錯誤資訊定位問題,對於釋出的程式i問題,通過系統輸出的錯誤資訊,能更準確的定位問題。