首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android JNI Crash定位步骤

今天讲的是纯干货,目的就是为了指导Android开发者如何根据JNI Crash日志顺藤摸瓜,最后直捣黄龙定位磨人的JNI Crash。所以废话不多,直接开干吧。 1....打蛇要打七寸,确定发生Crash的设备对应的CPU架构 在JNI Crash的日志里 如果有lib/arm, 则是armeabi-v7a架构; 如果有lib/arm64, 则是arm64-v8a架构...然后根据CPU架构找相应的toolchain: arm64-v8a对应的是aarch64-linux-android-4.9 armeabi-v7a对应的是arm-linux-androideabi-..., -e表示execution,后面是包含符号库的文件 以及报错的内存地址(即Crash log里pc后的字段) arm-linux-androideabi-addr2line -f -e xxx.so...错误定位 https://blog.csdn.net/xyang81/article/details/42319789 Can anyone explain the gcc cross-compiler

2.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    快速定位crash的炫酷方式

    本人所在项目组主要负责一款Android平台产品的开发,因为用户量比较大,正式版本发布后,每天Crash次数的上报量都在几十万量级,即便是内测版,每天Crash次数的上报量也在两三千次。...面对如此庞大的上报量,能否快速准确的定位问题直接关系到Crash的解决率,我们项目组在这方面做了比较多的尝试,现在在这里给大家分享一下比较有效的一些做法,也欢迎大家一起来探讨和分享。...每次定位问题都要到处找mapping文件,手动还原堆栈。...这样大大的提高了定位问题的效率,也让之前炙手可热的mapping文件终于被打入了冷宫。...但是即便把tag拉到本地后,只能定位到方法和调用栈,无法准确的确定到底是哪一句代码把应用搞死了。

    1.3K120

    Android NDK开发中快速定位crash(五)

    在平常开发中,当我们的Android程序crash的时候,我们可以通过Android studio logcat等工具快速定位等crach产生位置 如下图: [y8pr0a00yq.png] 是因为textview...但是在 NDK 项目开发中,在 C/C++ SDK 出现 crash 的的时候。...如下图:通过搜索 logcat 抓到的日志,只能定位到图中 哪个pid 进程 ID ,tid 线程 ID 出现了问题,开发者无法直观的排查错误原因 [8qdiciva4a.png] 使用ndk-stack...输出调用堆栈 linux 系统中进程 crash 后通过 backtrace 输出堆栈信息,开发者是基于这些堆栈信息来定位代码问题。...例如 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 使用示范 1.现在cpp文件中添加native方法,用于产生一个crash

    2.3K51

    Android NDK 开发中快速定位 Crash 问题

    在 Android NDK 开发中,排查问题遇到的最熟悉的关键字非 backtrace 莫属,Linux 系统中进程 crash 后通过 backtrace 输出堆栈信息,开发者就是基于这些堆栈信息来定位代码问题...当然定位 Native 层代码问题最优的方式还是通过 IDE(AS、VS)或者 GDB 进行 debug 断点调试,本文利用一个非常简单的 case 说明 Native 层定位 crash 的一般流程。...我们也可以借助于 ASAN (注意 Android 版本)进行定位,具体可以参考文章:用 Asan 提前解决 NDK 疑难 crash 写两行代码,先制造一个简单的 crash 场景。...用 addr2line 工具定位 addr2line 顾名思义,是内存地址转换成代码行号的工具。...-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe 执行 crash 代码得到的 crash

    1.3K30

    Linux crash分析简明参考

    ,包括:如何安装kdump,如何设置系统参数来捕获崩溃前的内存;如何使用crash做简单的分析;并且介绍如何使用更加简便的工具PyKdump来做crash文件的分析.通过了解这些知识, 可以帮助Linux...运维人员更快更方便地排查问题.2 基本步骤要捕捉到Linux在崩溃前一刻的内存,我们需要安装kdump工具在生产系统上,并进行相应的参数配置.这样当生产系统上发生crash的时候, 操作系统控制权将会转换到...工具分析4.1 安装crash工具为了不影响生产系统的运行,通常我们会将生成的vmcore文件拷贝到用于分析的Linux系统上去分析.分析工具通常采用crash工具.CentOS下可以通过如下命令安装:...,并且要对照Linux源代码进行分析,其门槛比较高,新手短时间内很难掌握.还好有PyKdump工具,该工具以python语言编写,集合了常用的vmcore文件分析功能,可以作为crash插件的方式运行,...Linux 7 Kernel Crash Dump Guidehttps://access.redhat.com/documentation/en-us/red_hat_enterprise_linux

    1.8K00

    如何定位Obj-C野指针随机Crash(一):先提高野指针Crash

    欲让其灭亡先让其疯狂,我们当然不是人为制造Crash,准确地说,是使隐藏的随机性Crash暴露出来,提高测试时的Crash率,从而降低版本发布后的Crash率。...这两种Crash都带随机性,而且这两种Crash有相当一部分都很难区分,甚至大量的Crash只有系统栈,如果不能根据日志重现,几乎是无解,让人非常蛋疼。 本文主要讨论的方向是Obj-C的野指针。...当然也有相当多的Obj-C野指针不是这种表现,所以野指针的Crash体量非常惊人。 为什么Obj-C野指针的Crash那么多?...对象释放后内存没被改动过,但是它自己析构的时候已经删掉某些必要的东西,可能不CrashCrash在访问依赖的对象比如类成员上、出现逻辑错误(随机Crash)。...对象释放后内存被改动过,写上了可以访问的数据,可能不Crash、出现逻辑错误、间接访问到不可访问的数据(随机Crash)。

    5.6K84

    如何定位Obj-C野指针随机Crash(三):如何让Crash自报家门

    本文主要介绍如何利用OC Runtime的特性,让OC野指针对象主动抛出自己的信息,秒杀某些全系统栈Crash。 ?...为了解答这个问题,我们可以先看看Crash栈,就会发现这些Crash都是在objc_msgSend上。...再看看下面这几个让人头疼的传说中的全系统栈Crash,你是否熟悉? 栈1: ? 栈2: ? 上面这两个Crash如果不能重现几乎是无解!...但是,加上我们的野指针定位神器之后再看看,类名和地址都可以打出来了,解决起来就不是什么问题了。 栈1被捕获后的信息: ? 栈2被捕获后的信息: ?...后记 写到这里,关于iOS野指针随机问题定位的三篇文章就写完了,特别说一下,文中提到的方法虽然可以提高野指针的曝光率和定位精度,但并不是万能,比如下面这几种情况,可能并不一定适用: 未触发出现野指针的逻辑

    6.1K52

    写了个 AS 插件:SmartNDKStack,快速定位 Android Native 开发 Crash

    对于Android Native开发的人员而言,可能经常会在开发过程及线上环境中遇到Native Crash的问题,对于这类native crash,我们一般都会直接addr2line,或使用ndk中附带的...==/lib/arm64/libndkdemo.so crash地址相对于库的偏移是0xf0c8 crash地址在函数Java_com_example_ndkdemo_MainActivity_stringFromJNI...中,相对于函数地址的偏移是52(十进制) crash所在库的BuildId是8c26841b3c32a89935d095d8e916180628bded7b 2....如何解析 常规操作 addr2line -Cfie libndkdemo.so 0xf0c8 网上的大部分教程都是直接进行如上的addr2line操作,对于自己开发过程中直接运行出现了crash的确可以快速定位...,但如果代码已发生变更,库不匹配了,定位效率就会大幅下降,比如测试报了crash,但是本地代码已发生变更,库不匹配,如果想拿到build id相同的库,就要回退到当时的代码,重新编一个一样的库再做addr2line

    2.3K60

    如何定位Obj-C野指针随机Crash(三):加点黑科技让Crash自报家门

    本文主要介绍如何利用OC Runtime的特性,让OC野指针对象主动抛出自己的信息,秒杀某些全系统栈Crash。...为了解答这个问题,我们可以先看看Crash栈,就会发现这些Crash都是在objc_msgSend上。...再看看下面这几个让人头疼的传说中的全系统栈Crash,你是否熟悉? 栈1: 栈2: 上面这两个Crash如果不能重现几乎是无解!...但是,加上我们的野指针定位神器之后再看看,类名和地址都可以打出来了,解决起来就不是什么问题了。...后记 写到这里,关于iOS野指针随机问题定位的三篇文章就写完了,特别说一下,文中提到的方法虽然可以提高野指针的曝光率和定位精度,但并不是万能,比如下面这几种情况,可能并不一定适用: 未触发出现野指针的逻辑

    92530

    实战案例分享:根据 JVM crash 日志定位和分析问题

    JVM crash了 下面是一份crash report, 下面是截取了crash report的部分,用于分析: # Problematic frame: # V [libjvm.so+0x5bbf05...SA 工具之CLHSDB 知道错误的对象地址,需要分析core dump知道哪个对象出了问题,在Linux上通常会用GDB,但是这并不适合分析我们初学者,尤其是我们并不是非常清楚对象的结构和布局,我们需要利用...JMV提供的SA工具 JVM提供的HSDB工具是一款非常好的工具,通过工具能查看和分析运行中的JVM的heap对象,当然也可以常看core dump, 但问题是HSDB是有UI界面的,我们在linux系统中通常没有...Crash report里会有堆栈信息 crash report就不贴了,最后调用的是VerifyFieldColsure:do_oop class VerifyFieldClosure: public...JVM提供了环境参数可以控制是否压缩指针 -XX:+UseCompressedOops 这样一个完成的通过JVM crash 日志和core dump进行JVM的问题定位和分析结束了,希望能对你有所帮助

    2.4K21

    iOS开发笔记(八)---- 键盘、静态库、动画、Crash定位

    问题定位: 此问题可以复现,呼起键盘之后频繁切换键盘。...问题描述: 在线上运行过程中发现某些Crash出自静态库,但是Crash日志里面无法定位到静态库出现Crash的具体代码行数。...问题定位Crash日志里面的信息无法符号化,原因就是还原Crash信息的符号表里没有静态库的信息。 我们知道,静态库是只有编译,没有链接的过程。 在实际打到二进制包的时候,才会进行链接操作。...Crash定位 源于实际开发中遇到的一个Crash问题,类似堆栈如下: ? crash问题在各个iOS版本均有出现,每天的crash率(crash次数/用户数)在万分之1.5左右。...通过crash的描述platform_memmove,还有堆栈信息我们可以定位到代码异常是出现在memcpy的函数。 通过错误类型,我们知道是访问非法内存地址。

    1.2K90

    如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现

    继上一篇如何定位Obj-C野指针随机Crash介绍了思路后,这次我们继续看,如何让非必现Crash变为必现。 ?...只有小概率Crash肿么办? 之前介绍了一种在内存释放后填充0x55使野指针后数据不能访问,从而使某些野指针从不必现Crash变成了必现。然而,我们早就看穿了一切,这个事情不会那么顺利的。...(这个地方可能会发生多种情况,可以参考之上一篇文章中的图) 没有发生Crash可不是好事,因为这种情况如果后续再Crash,问题就非常难查,因为你看到的Crash栈很可能和出错的代码完全没有关联。...既然这个问题这么棘手,最好还是和之前一样,让这个Crash提前暴露。 继续提高Crash率 沿着上次的思路,首先,我们要解决的问题就是怎么让系统不再往这片释放的内存上乱放东西。...可能由于锁的存在,会使cpu线程切换变得频繁,这样多线程的问题Crash率也可能会提升(最近遇到一个多线程引起的Crash很难重现,但我加了这个代码后就变成了必现Crash) 做完这些之后拿到项目中实际验证一下

    3.9K44

    如何快速定位、分析、解决非Crash的BUG(iOS 11篇)

    对于致命的Bug,我们可以通过Crash日志进行分析;对于无法复现的Bug、特定操作步骤引起的Bug、某些版本/系统才出现的Bug,每个开发者都有自己的一套分析、定位、解决的方法。...本文以工作中遇到的几个iOS 11 Bug为例,介绍快速定位、分析、解决Bug的经验。...用录屏工具辅助,定位到闪烁是因为图片放大的动画过程中,出现了某一帧异常: ? 异常帧1 ?...据此回溯定位:后台数据没有返回=>客户端没发协议=>下拉刷新没有回调。 再从UIScrollView的delegate回调入手,单步调试定位到问题: ?...小结: 正向和逆向的链式分析方式是最常见的Bug定位方法; 对于实在无法定位时,再使用二分注释的方法。

    2.4K50

    Android Crash之Native Crash分析

    前言 上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到;本篇博客来谈谈如何针对...Native Crash进行分析,它相对与Java层面的Crash有什么特点?...上一节我们谈到so库是同通过Native语言开发的,自然在Android中使用so库的时候发生的Crash,就是我们所说的Native Crash。...Native Crash如何分析?...Crash分析有个初步的认识,关于这一块还有很多东西可以讲,比如具体的signal有哪些,Linux下的信号机制是怎样的,怎样才能够捕获到信号等等,关于Native层的Crash捕获,我们有没有第三方的开发工具能帮助到我们

    3.2K60

    Android Crash之Java Crash分析

    本系列博文主要是想跟大家分享一下在Android平台中如何进行Crash分析并解决问题并告诉大家如何通过bugly进行崩溃捕获快速定位问题。 什么是Crash?...Native Crash 本篇先探讨Java Crash,Native Crash我们会在下一篇重点讨论。...通过Crash堆栈信息定位问题 上面就是一个很简单的Crash啦,相信很多同学在开发过程中一定遇到过这种情况,万恶的空指针啊,啊,啊。我们来看看logcat给我们输出的堆栈信息: ?...解决问题 上一节我们很轻松定位到问题,我们升华一下把它解决掉,我们找到18行,修改代码如下: ?...这个时候程序就正常运行了,是不是很简单啊,但这种情况是自己在开发中调试运行时可以通过logcat来定位问题,但如果产品上线之后你怎么办,用户都是小白哦,可不会给你提供错误日志,这个就是本篇文章要讲的重点

    1.2K20
    领券