周末碰到一个问题,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问题,通过系统输出的错误信息,能更准确的定位问题。