【coredump简介】

blog.csdn.net/tenfyguo/article/details/8159176

【如何打开coredump功能】

1、打开kernel编译开关

@kernel/arch/arm/Kconfig

config ARM

bool

default y

select HAVE_AOUT

select HAVE_DMA_API_DEBUG

...

+ select ELF_CORE

...

select HAVE_BPF_JIT if NET

help

...

这个开关使能内核coredump模块

2、修改rc文件

@init.pisces.rc

on early-init

+ setrlimit 4 2147483647 2147483647

on post-fs-data

+ mkdir /data/tombstones 0711 system system

+ mkdir /data/corefile

+ chmod 777 /data/corefile

on property:ro.debuggable=1

+ write /proc/sys/kernel/core_pattern /data/corefile/core-%e-%p

+ write /proc/sys/fs/suid_dumpable 1

其中,

setrlimit是设置coredump文件大小限制

/data/corefile/是coredump输出目录

/proc/sys/kernel/core_pattern是设置corefile的路径

/proc/sys/fs/suid_dumpble是coredump的动态开关,内核coredump模块根据这个值来判断是否要dump。

3、修改虚拟机

@dalvik/vm/native/dalvik_system_Zygote.cppstatic voidenableDebugFeatures(u4 debugFlags)

{

...

#ifdef HAVE_ANDROID_OSif ((debugFlags & DEBUG_ENABLE_DEBUGGER) != 0) {/*To let a non-privileged gdbserver attach to this

* process, we must set its dumpable bit flag. However

* we are not interested in generating a coredump in

* case of a crash, so also set the coredump size to 0

* to disable that*/

if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) < 0) {

ALOGE("could not set dumpable bit flag for pid %d: %s",

getpid(), strerror(errno));

}else{structrlimit rl;+#if 0rl.rlim_cur= 0;

rl.rlim_max=RLIM_INFINITY;+#endif

虚拟机启动时,可能会将rlimit设置位0,所以这里得注释掉。

4、关闭SELinux

adb shell setenforce 0

selinux会限制app给/data/corefile/目录写文件,所以得关闭selinux。

【如何触发coredump】coredump是kernel的信号处理函数作的,它会判断当前信号的默认处理类型是否为coredump,如果是则进入dump流程关于信号及其默认处理类型如下:

* +--------------------+------------------+

* | POSIX signal | default action |

* +--------------------+------------------+

* | SIGHUP | terminate |

* | SIGINT | terminate |

* | SIGQUIT | coredump |

* | SIGILL | coredump |

* | SIGTRAP | coredump |

* | SIGABRT/SIGIOT | coredump |

* | SIGBUS | coredump |

* | SIGFPE | coredump |

* | SIGKILL | terminate(+) |

* | SIGUSR1 | terminate |

* | SIGSEGV | coredump |

* | SIGUSR2 | terminate |

* | SIGPIPE | terminate |

* | SIGALRM | terminate |

* | SIGTERM | terminate |

* | SIGCHLD | ignore |

* | SIGCONT | ignore(*) |

* | SIGSTOP | stop(*)(+) |

* | SIGTSTP | stop(*) |

* | SIGTTIN | stop(*) |

* | SIGTTOU | stop(*) |

* | SIGURG | ignore |

* | SIGXCPU | coredump |

* | SIGXFSZ | coredump |

* | SIGVTALRM | terminate |

* | SIGPROF | terminate |

* | SIGPOLL/SIGIO | terminate |

* | SIGSYS/SIGUNUSED | coredump |

* | SIGSTKFLT | terminate |

* | SIGWINCH | ignore |

* | SIGPWR | terminate |

* | SIGRTMIN-SIGRTMAX | terminate |

* +--------------------+------------------+

* | non-POSIX signal | default action |

* +--------------------+------------------+

* | SIGEMT | coredump |

* +--------------------+------------------+

其中SIGQUIT是android重新定义了信号处理函数,用作dump java trace。

我们native crash里常见的SIGBUS、SIGABRT、SIGSEGV都是coredump类型的。所以一旦程序出了上述类型的错误,就会自动进入coredump。

我们也可以在有root权限的情况下,adb shell后用kill -11 {pid}命令来主动出发coredump(注意亮屏下要敲2~3下才会进入dump流程)。

【生成的dump的文件在哪】

就是上面设置的core_pattern指向的路径:/data/corefile/core_***_{pid}

【如何分析coredump】

步骤1:gdb工具

prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gdb

步骤2:准备symbols

out/target/product/pisces/symbols/

必须要跟手机coredump时的版本一致!

步骤3:进入gdb环境(直接运行gdb即可)

$ prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gdb

GNU gdb (GDB) 7.6

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".

For bug reporting instructions, please see:

.

(gdb)

步骤4:装载可执行程序

(gdb) file out/target/product/pisces/symbols/system/bin/app_process

Reading symbols from /home/mi/workspace/0-mi3_v6/out/target/product/pisces/symbols/system/bin/app_process...done.

步骤5:配置动态库搜索路径

(gdb) set solib-search-path out/target/product/pisces/symbols/system/lib

步骤6:装载core文件

(gdb) core core-du.map.location-1804

warning: core file may not match specified executable file.

[New LWP 1804]

[New LWP 1824]

[New LWP 2210]

[New LWP 2320]

[New LWP 1826]

[New LWP 1818]

[New LWP 2062]

[New LWP 1819]

[New LWP 1813]

[New LWP 1817]

[New LWP 1808]

[New LWP 1814]

[New LWP 1815]

[New LWP 2076]

[New LWP 1992]

warning: Could not load shared library symbols for 3 libraries, e.g. /system/bin/linker.

Use the "info sharedlibrary" command to see the complete listing.

Do you need "set solib-search-path" or "set sysroot"?

Core was generated by `com.baidu.map.location ‘.

Program terminated with signal 11, Segmentation fault.

#0 epoll_wait () at bionic/libc/arch-arm/syscalls/epoll_wait.S:10

10 mov r7, ip

接下来就可以用gdb的命令了

原文:http://www.cnblogs.com/YYPapa/p/6851418.html

android coredump,coredump功能介绍相关推荐

  1. android 最新功能介绍,Android Studio 常用功能介绍

    界面介绍 讲解1 这个界面,显示了我们使用 Android Studio时经常接触到的功能面板. Project 面板. 用于浏览项目文件. Project 面板会显示当前的所有的 module .  ...

  2. android客服功能介绍,Android 客服工作台 SDK

    Android 客服工作台 SDK 开发工具 目录 build.gradle 配置 添加依赖,在app的build.gradle 中dependencies中加入如下(添加后需同步gradle): a ...

  3. Android SDK包功能介绍,中文开发API

    Android 包索引 这些是API包. 查看全部 API classes . android 包含平台中包含的应用程序使用的资源类,并定义系统功能的应用程序权限. android.accessibi ...

  4. android 华为拍照功能介绍,华为手机拍照方式有哪些?华为手机六大拍照方式介绍...

    华为手机拍照方式有哪些?手机拍照可以说不是一门简单的课程,不是随便选个角度拍一拍就完事的,它是需要技巧的,本文中为大家介绍的是使用华为手机进行拍照的六大技巧,感兴趣的朋友不妨了解一下. 1.按快门键拍 ...

  5. android中拍照功能介绍,Android实现拍照功能

    大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个"拍照"按钮.直接上代码! 1.CameraDemoActivity.java(主界面) p ...

  6. Android 系统(58)---Android 系统 UI - SystemUI之功能介绍和UI布局实现

    Android 系统 UI - SystemUI之功能介绍和UI布局实现 前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如 ...

  7. 华为Android彩蛋,华为手机DIY拨号及彩蛋功能介绍

    打开华为手机,为了方便我直接用自己的手机,界面如下 选择手机左下角"拨号"按钮,即下图中红色方框标出的按钮 这时显示拨号界面如下,注意到我红色方框中标记出来的"中国移动& ...

  8. android有什么作用,Android 7.0有什么功能 Android N完整功能参数介绍

    类型:系统工具大小:1000M语言:中文 评分:10.0 标签: 立即下载 Android 7.0是安卓最近正在更新的一个版本,而其中也是有着很多的特性,在Android N的逐渐的曝光中,我们也是可 ...

  9. Android系统源码目录及功能介绍

    Android的移植按如下流程:     1.android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     2.正确挂载文件系统,确保内核启动参数和 android 源代码 ...

  10. Android 系统 UI - SystemUI之功能介绍和UI布局实现

    前言 Android ROM开发过程中,难免会涉及到对SystemUI的修改,之前做过一些这方面的工作,现在整理下,准备按照如下章节介绍SystemUI.借此对SystemUI做下整体性回顾.  -S ...

最新文章

  1. 算法踩坑6-二叉搜索树排序
  2. BTree C 语言实例
  3. C++ Primer 5th笔记(chap 15 OOP)继承之类型转换
  4. Error dialog box generic entry point
  5. 微软IE 9 Beta全程体验图集
  6. phpstudy使用(80端口被system占用,无法关闭和删除)
  7. Oracle数据库imp
  8. platform_device_add()函数分析
  9. 电脑访问不了虚拟机ftp服务器,解决win环境下访问本机虚拟机中centos7 ftp服务器的问题...
  10. 数据库系统的三级模式结构
  11. 省中心IEPGM同步到地市的IEPGM有问题,中心为“已商用”状态,地市为“已上架”状态
  12. Android PopupWindow 的方法 弹出窗口方法
  13. 手工焊接电路板经验总结
  14. python判断火车票座位_Python3 实现火车票查询工具
  15. 华为防火墙USG5500的配置方法
  16. 如何搭建适合自己团队的构建部署平台
  17. android studio无法识别叶神模拟器
  18. [DP]Apple Catching G
  19. 项目管理 | 可行性研究报告怎么写?这5大部分一定要在报告里呈现
  20. Understanding C/C++ Strict Aliasing

热门文章

  1. cpu测试shell脚本
  2. QQ2013 正式版 SP4 8796聊天内容获取
  3. 机器学习算法输入输出概览与调节参数速查
  4. 域名增加https访问
  5. python批量将word、ppt转化为pdf(极简版)
  6. 南宁微信投票系统服务器,九天微信投票机刷平台
  7. 倾情力荐,智能访客系统的正确打开方式
  8. 蓝桥杯十大常见天阶功法——水之呼吸.壹之型.递归
  9. 浏览器当前安全设置不允许发送html表单,当前安全设置不允许发送html表单。怎么办?...
  10. php get meta tags,php怎么抓取网站中meta函数get_meta_tags()