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問題,通過系統輸出的錯誤信息,能更準確的定位問題。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章