热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android定位crash

采用调用链或者函数符号表来定位crash位置android应用程序开发及调试过程中,单步调试仍然不是很方便。由于依托java层,jni层的源代码要以动态

采用调用链或者函数符号表来定位crash位置

android 应用程序开发及调试过程中,单步调试仍然不是很方便。由于依托java层,jni层的源代码要以动态库形式装载。

但是好在程序crash时,log中会抛出断点信息。

**********************************************************************************************

补充断点信息

02-10 20:47:54.126: I/DEBUG(2370): Build fingerprint: 'samsung/SCH-iXXXX/SCH-iXXXXX/SCH-iXXXX:2.XXX/FROYO/ED29:user/release-keys'
02-10 20:47:54.126: I/DEBUG(2370): pid: 4398, tid: 4402  >>> /system/bin/mediaserver <<<
02-10 20:47:54.126: I/DEBUG(2370): signal 11 (SIGSEGV), fault addr deadbaad
02-10 20:47:54.126: I/DEBUG(2370):  r0 00000000  r1 afd14921  r2 00000027  r3 00000070
02-10 20:47:54.126: I/DEBUG(2370):  r4 afd42328  r5 00000000  r6 00000000  r7 ffffee07
02-10 20:47:54.126: I/DEBUG(2370):  r8 00100000  r9 a811c479  10 4031f000  fp 0002cef8
02-10 20:47:54.126: I/DEBUG(2370):  ip 00001730  sp 4041e8b0  lr deadbaad  pc afd11f74  cpsr 60000030
02-10 20:47:54.126: I/DEBUG(2370):  d0  643a64696f72646e  d1  6472656767756265
02-10 20:47:54.126: I/DEBUG(2370):  d2  6f6365446d28203d  d3  6874646957646564
02-10 20:47:54.126: I/DEBUG(2370):  d4  6f63726f6c6f632f  d5  6e6f69737265766e

 

02-10 20:47:54.227: I/DEBUG(2370):          #00  pc 00011f74  /system/lib/libc.so
02-10 20:47:54.227: I/DEBUG(2370):          #01  pc 0000138e  /system/lib/liblog.so
02-10 20:47:54.227: I/DEBUG(2370):          #02  pc 000013f0  /system/lib/libjin-1.so
02-10 20:47:54.227: I/DEBUG(2370):          #03  pc 00001522  /system/lib/libjni-2.so
02-10 20:47:54.231: I/DEBUG(2370):          #04  pc 00008e1c  /system/lib/libxxxxxxx.so
02-10 20:47:54.231: I/DEBUG(2370):          #05  pc 0003920c  /system/lib/libmedia.so

**********************************************************************************************

此时要注意&#xff0c;不要找系统库的问题&#xff0c;要找就找你自己编译的库。 像#02,#03的。

此时定位库的出问题的函数的位置一般只能依靠两种方法。假若动态库为jni-1.so&#xff0c;jni-2.so

 

方法1&#xff0c;若库在编译时为NO_DEBUG版本&#xff0c;即不含有DEBUG信息&#xff08;NDK_DEBUG&#61;0&#xff09;&#xff0c;这种情况下&#xff0c;可以用

obj-dump -T  jni-1.so

obj-dump -T jni-2.so

的方法&#xff0c;将函数符号表打印出来&#xff0c;这样可以得到每个函数的入口地址。

结合log 中的crash信息&#xff0c;我们可以粗略定位&#xff0c;问题出在哪个函数里面。

但是这种方法找不到精确的出问题的位置&#xff0c;有时候函数比较长时&#xff0c;在函数里面进一步判断出问题的地方也比较麻烦。

此时可采用第二种方法

方法2&#xff0c;编译库的时候&#xff0c;采用DEBUG版本&#xff0c;即含有DEBUG信息&#xff08;NDK_DEBUG&#61;1&#xff09;&#xff0c;这种情况下。

我们可以把crash的信息复制下来&#xff0c;放在记事本里面&#xff0c;命名为crash.log.txt&#xff0c;将此记事本放在android工程的libs/armeabi/目录下,当然也可以是libs/armeabi-v7a

/cygdrive/e/Software/android-ndk-r6b/ndk-stack -sym obj/local/armeabi-v7a/ -dump e:/logs/crash.log.txt
中间一项也可以是  -sym libs/armeabi-v7a/ 反正就是你的动态库的位置。

这样会打印出具体的出问题的代码位置&#xff0c;这样一般可以精确到行。

 


推荐阅读
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
author-avatar
幼俐佩其392
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有