Android 下基于core文件分析crash信息

LinuxCore文件能够帮助我们定位信息,Android下同样也可以生成Core文件。下面举例说明:

首先请阅读上面章节中,如何生成带调试信息的可调式执行程序以及so库。

然后,adb push到虚拟仿真机中。

  for(int i = 0;i<3;i++)

    {

   printf("i = %d\n",i);

   char * p=NULL;

   char src[]="1232222222";

   strcpy(p, src);

     }

上面程序中strcpy(p, src);会出现内存访问错误。下面举例如何定位该问题。

程序运行一次for循环后,出现内存访问错误,异常停止。

如果需要生成core文件,而不采用gdb调试,则需要设置仿真机中的adb shell文件。

进入adb shell环境:

# ulimit -c unlimited

# ulimit -a

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         unlimited

stack(kbytes)        8192

coredump(blocks)     unlimited

memory(kbytes)       unlimited

locked memory(kbytes) 64

process(processes)   4096

nofiles(descriptors) 1024

#

使用命令

# ulimit -c unlimited

开启core文件生成机制。

使用命令

# ulimit -a

可以看到是否开启。

再次执行被测程序:

# ./temptest

main enter

i = 0

[1] + Stopped (signal)        ./temptest

# ls

core

gdb.setup

gdbserver

libcrystax.so

libgnustl_shared.so

temptest

[1]   Segmentation fault (core dumped) ./temptest

#

可以发现生成了core文件。

在另一个终端中找到arm-linux-androideabi-gdb工具所在目录

#cd  /opt/android-ndk-r7-crystax-1/toolchains/arm-linux-androideabi-4.6.3/prebuilt/linux-x86/bin

使用命令adb pullcore文件下载下来:

[root@bogon bin]# adb pull /data/data/xtest/core

1155 KB/s (1601536 bytes in 1.353s)

[root@bogon bin]#

使用arm-linux-androideabi-gdb进行core文件调试。

[root@bogon bin]#  arm-linux-androideabi-gdb -c core /home/testCodes/obj/local/armeabi-v7a/temptest

你可能感兴趣的:(Android)