1. 程式人生 > >Android的native可執行程式段錯誤跟蹤和解決

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