Coredump简介和使用_v1.0_201504281025.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Coredump 简介及使用 Coredump 简介及使用 DOCUMENT HISTORY Vers Date Author Type of Modification ion 1.0 04/27/15 Vincent Song Creation SWD2-FRAEMWORK/VINCENT SONG/ 2015-04-27 16:44/V1.0 1 Coredump 简介及使用 目录 目录 Coredump 简介及使用1 目录2 一、什么是Coredump 3 二、Coredump 产生的原因3 三、如何控制产生Coredump 4 四、使用Coredump 的准备4 五、开始使用Coredump 5 SWD2-FRAEMWORK/VINCENT SONG/ 2015-04-27 16:44/V1.0 2 Coredump 简介及使用 一、什么是Coredump 有些C/C++程序或者通过JNI 调用了C/C++ 的APK 程序可以通过编译, 但在运 行时会出现错误,比如常见的signal 11 (SIGSEGV),这样的程序都是可以通过编 译的,而且这样的错误一般情况下不会像编译错误一样告诉你具体在代码的那一 行有问题,所以调试起来比较困难和麻烦。 因为上面的这种debug 困难的情况,所以就产生了coredump 这种机制 (很 多操作系统都支持这种机制,并不是Linux 独有,也不是专门为Android 而生), 系统 (或者标准库)在发现程序错误的异常退出时,就会把程序当时整个进程的 状态dump 出来,生成一个coredump 文件,通常情况下coredump 包含了程序 运行时的内存,寄存器状态,堆栈指针,内存管理信息等,可以理解为把程序 工作的当前状态存储成一个文件,很幸运,我们现在使用 Android 系统是基于 Linux 内核,Linux 内核原生就支持这种机制。 二、Coredump 产生的原因 造成程序coredump 的原因很多,这里根据以往的经验总结一下: 1、内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正 常的使用结束符 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp 等字符串操作函数,将目标字 符串读/ 写爆。应该使用 strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp 等函数防止读写越界。 2、多线程程序使用了线程不安全的函数 第1 类:不保护共享变量的函数 第2 类:保持跨越多个调用的状态函数 第3 类:返回指向静态变量指针的函数 第4 类:调用线程不安全函数的函数 3、多线程读写的数据未加锁保护 一个线程做完条件判断准备使用时发生了调度,另外一个线程将其释放 并置空或者修改了内容,就会导致程序执行流错乱,要么指针异常,要 么状态错乱发生另外的异常 4 、非法指针 a) 使用空指针 b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配 为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结 构或类型 的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档