热门标签 | 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;这样一般可以精确到行。

 


推荐阅读
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
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社区 版权所有