像TOMESTONE这样的问题都是发生了段错误所引发的,如
pid: 254, tid: 277 >>> system_server <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad eax 00000000 ebx b7705680 ecx 00001000 edx b7706f64 esi b6e73000 edi a92e7d6c xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007b eip b76a3ef3 ebp a92e7d88 esp a92e7d40 flags 00010282 #00 eip: 00036ef3 /system/lib/libc.so (abort+0x83) #01 eip: 0000f126 /system/lib/libc.so #02 eip: 0001190f /system/lib/libc.so (tmalloc_large.clone.7+0x5af) #03 eip: 00013197 /system/lib/libc.so (dlmalloc+0x307) #04 eip: 00014f42 /system/lib/libc.so (malloc+0x22) #05 eip: 0003f024 /system/lib/libc.so (__smakebuf+0x64) #06 eip: 0003f928 /system/lib/libc.so (__srefill+0x188) #07 eip: 0003cd58 /system/lib/libc.so (fgets+0xa8)
注意这是个system_server的问题,全部都是些在本地的调用,但是在开始的堆栈中,libc.so中,这个是GOOGLE写好的C库,这个是为了在手机的特意改写的标准C库,一般都不会有什么问题,根据地址,可以猜想是传进来的fp发生了问题,于是我就写个tomestone_test在/r3/bionic/linker下,这个是我测试的代码:
#include"linker.h"
int main(void)
{
debugger_init();
int *p=0;
*p = 0;
return 0;
}
修改了一下Android.mk
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
debugger.c
LOCAL_MODULE:= tomestone_test
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
再注释掉一点函数就可以了。就可以编译通过了。
感觉听不错的,这样能自己改改代码了,但是今天却有点不高兴,算了,不想说了,先走了。都是些坑爹的。