如何定位crach问题

下面是学习整理的一般总结

一:知道具体那个程序导致的crash

 

   1 编译一下 gcc -ggdb xxx.c 重新生成目标文件,方便调试!
      2.
输入命令 ulimit -c unlimited ,然后执行 编译后的程序,发生segmentation falut,同时会生成一个文件core.xxxx(xxxx means pid) 。
     3 .gdb a.out core.xxxx ,并gdb > bt
马上就会输出错误代码所在的文件和行数,同时还打印出这句错误的语句。

 

二: 系统比较大,不知道具体哪个程序导致的?

 

    在做测试前,最好先收集一些信息以备后用

    1 收集所有进程信息 ps -t

    2 内核打印信息: dmesg

    3 抓取所有信息 logcat &

 

     出现问题后如何处理?

     reset 后查看出现问题的进程:cat /proc/XXX(PID)/maps的memory map

    

    根据pc代码行配合 arm-eabi-addr2line可以发掘出错位置所对应的函数名。用法如下;
arm-eabi-addr2line -f -e libmyjni.so 0×00024039 (
输出日志中最上面的pc值,可以回溯最终函数调用顺序)

 

    反汇编 相关的动态库或程序:prebuilt/Linux/toolchain-eabi-4.2.1/bin/arm-elf-objdump -d   out/target/product/XXXX/symbols/android/lib/XXX.so

 下面一堆信息如何处理?需要使用"stack"工具结合符号信息表翻译出具体的函数关系与行数!

 r0 00000000 r1 49189c24 r2 00000038 r3 00000080
  r4 a9706110 r5 49189c24 r6 49189d48 r7 00000000
  r8 49189d9c r9 430f0eb4 10 430f0e9c fp 002d35f8
  ip 00000000 sp 49189c10 lr a97036ed pc a970335c cpsr 20000030

 


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值