首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Android Crash之Native Crash分析

这类错误一般是由C++层代码错误引起的 绝大部分Crash工具不能够捕获 我们在实际Android开发的时候,可能会引入第三方的一些so库或者自己开发相应的so库供程序使用,然而so库一般是通过c或者...c++开发的。...如果有同学不明白的话,建议先去了解下JNI的相应技术,总的来说通过JNI技术,就让我们让Java世界跟Native世界可以联系在一起,也因为这个特性,让Java具有跨平台的特性。...这下子可分析的内容就多起来了,我们逐个来看看: 进程信息:pid表示进程号,tid表示线程号,name表示进程名 错误信号:signal 11表示信号的数字,SIGSEGV表示信号的名字,code 1(...堆栈信息:##00表示栈顶,##01调用#00,以此往下都是嵌套的调用关系,直至栈顶。 这里参考了:http://bugly.qq.com/bbs/forum.php?

3.1K60

关于cocos2dx 3.0升级崩溃报错(unable to load native library) 和(Fatal signal 11 (SIGSEGV) at 0x00000000)

上周五准备发布一个安卓包,编译很轻松的就过了,没有花费多少时间,但是安装到手机后,发现运行就崩溃了。...好不容易运行起来了,看到崩溃的时候logcat的报错是“unable to load native library XXX”,莫名其妙的报错,看样子好像是程序安装的问题,但是我查看了文件系统,有这个so...改过来之后还是继续崩溃,不过报错信息变了,“Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)”,在网上查了很多,到处都是引用的下面这篇文章,但是这篇文章根本不能解决我的问题...cocos2dx fatal signal11(SIGSEGV) at 0x00000000(code=1)的解决实践         我加了很多打印,都没打印出来,估计如网上所有,可能是JNI的问题,...不过有了上面的经验,突然想到是不是jni入口也改变了呢,对比了我的版本的main.cpp文件和示例版本的main.cpp,发现果然是入口文件版本的修改导致,把示例的main.cpp里面的代码复制过来,再编译

51920

音视频开发之旅(59)- 捕获收集、定位分析 Native崩溃

Breakpad是一个跨平台的开源项目,这一小节我们来学习实践下如何编译使用. 2.1 我们先来看下Breakpad的工作原理 3.jpg 图片来自: 学会这个绝招,让 C++ 崩溃无处可逃!.../src/main/cpp/crash.cpp:10 可以看到输出了对应的错误类和行数,再结合错误原因SIGSEGV即可以快速的分析出具体的原因。.../test /tmp/fd311404-a968-4ce0-17d5fa8a-61a8fdf1.dmp crash.log 脚本来自:学会这个绝招,让 C++ 崩溃无处可逃! #!...尽量做到每周至少一篇,一起学习吧 四、资料 崩溃优化(上):关于“崩溃”那些事儿 Android 平台 Native 代码的崩溃捕获机制及实现 学会这个绝招,让 C++ 崩溃无处可逃!...Android使用Google Breakpad进行崩溃日志管理 Android NDK&JNI开发之Native崩溃日志分析方法 异常处理 - Native 层的崩溃捕获机制及实现 Android NDK

1.2K40

【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因

王竞原,负责网游刀锋铁骑项目,高级开发工程师,使用C++已有10年,非常喜欢C++,特别是C++11。希望能与广大的C++爱好者多交流。...一、什么是Android的C/C++ NativeCrash Android上的Crash可以分两种: 1、Java Crash java代码导致jvm退出,弹出“程序已经崩溃”的对话框,最终用户点击关闭后进程退出...2、Native Crash 通过NDK,使用C/C++开发,导致进程收到错误信号,发生Crash,Android 5.0之前进程直接退出(闪退) , Android 5.0之后会弹“程序已崩溃”的对话框...如果不是黑客故意攻击,那么最终函数调用很可能会跳转到无法读写的内存区域,产生段错误信号SIGSEGV或SIGABRT,造成程序崩溃,并生成core文件。...投稿方式:将文章和个人介绍邮件 bugly@tencent.com,字数不限。

4.1K62

捕获崩溃异常并重启程序,上传崩溃日志服务器

App的上线测试不可能囊括所有的错误,以及一些极端的情况可能考虑不到, 所以给App设置崩溃日志反馈是很有必要的,很多第三方都有做到,例如说腾讯的Bugly,友盟的统计等等,都可以实现,但是如果仅仅是需要向服务器反馈崩溃日志的话...系统的API中给我们提供了一个可以捕获App异常的方法: Thread.setDefaultUncaughtExceptionHandler(restartHandler); // 程序崩溃时触发线程...以下用来捕获程序崩溃异常 所以我们就可以使用以上方法来解决反馈崩溃日志的需求,以下是具体代码: /** * 创建服务用于捕获崩溃异常 */ private static...public void uncaughtException(Thread thread, Throwable ex) { restartApp(ex);//发生崩溃异常时

87120

应用稳定性优化系列(二),CrashTombstone问题分析及定位

SIGBUS与SIGSEGV的区别 SIGBUS(Bus error)意味着指针所对应的地址是有效地址,但总线不能正常使用该指针。通常是未对齐的数据访问所致。...例如:short array[16];int * p = (int *)&array[1];*p = 1;SIGSEGV(Segment fault)意味着指针所对应的地址是无效地址,没有物理内存对应该地址...2.2 反编译调用栈法 反编译调用栈步骤 新建一个tombstone.txt,把backtrace里面的内容写入txt里面去; 执行脚本 ....下图是主要的虚拟机函数: 案例分析 进入某应用就崩溃,调用栈如下: 分析上方调用栈发现,因为调用dvmInterpret方法,表明启动Dalvik虚拟机解释器,并且解释执行指定的JAVA代码。...接着往下看,真正的原因在下方调用栈: 一个JAVA方法通过JNI调用底层方法时,传入一个非法的String,JNI在把这个String转换成char数组时导致失败。

2.6K20

JVM致命错误日志(hs_err_pid.log)分析

当出现crash时,该文件默认会生成工作目录下,然而可以通过jvm参数指定生成路径(JDK6中引入): -XX:ErrorFile=....而导致crash的原因很多,常见的原因有jvm自身的bug,应用程序错误,jvm参数配置不当,服务器资源不足,jni调用错误等。...(0xb)”表示jvm crash时正在执行jni代码,而不是在执行java或者jvm的代码,如果没有在应用程序里手动调用jni代码,那么很可能是JIT动态编译时导致的该错误。...这里该问题已经分析出原因了,但是咱们可以再深入一步,分析下其它信息。...(省略) 这些信息是虚拟机崩溃时的虚拟内存列表区域。它可以告诉你崩溃原因时哪些类库正在被使用,位置在哪里,还有堆栈和守护页信息。

6.2K71

JVM致命错误日志(hs_err_pid.log)分析

当出现crash时,该文件默认会生成工作目录下,然而可以通过jvm参数指定生成路径(JDK6中引入): -XX:ErrorFile=....而导致crash的原因很多,常见的原因有jvm自身的bug,应用程序错误,jvm参数配置不当,服务器资源不足,jni调用错误等。...(0xb)”表示jvm crash时正在执行jni代码,而不是在执行java或者jvm的代码,如果没有在应用程序里手动调用jni代码,那么很可能是JIT动态编译时导致的该错误。...这里该问题已经分析出原因了,但是咱们可以再深入一步,分析下其它信息。...(省略) 这些信息是虚拟机崩溃时的虚拟内存列表区域。它可以告诉你崩溃原因时哪些类库正在被使用,位置在哪里,还有堆栈和守护页信息。

6.8K40

JNI使用过程记录,Java调用C++函数,JNI层使用和实例化Java对象

近期提供给JAVA应用使用的编解码协议库,需求就是编码的字符串,需要解码为Java对象;回应消息的Java对象,需要编码为指定格式的字符串,把模板代码总结下,主要涉及几个点: 1、在JNI层找到Java...对象,及其属性变量的值,然后转换为JNI层的内存数据; 2、在JNI层实例化Java对象,并设置这个Java对象的属性变量,并返回这个Java对象; 示例代码如下: Java对象  public class...public String source;       public String credential_username;     public String credential_password; } JNI...);       kmip_free_request_message(&ctx, &req_msg_client);     return jobj; } Java对象,输入JNI层使用 public...return_code; public int    result_reason; public String error_message;   public String uniq_id; } JNI

49510

Android NDK开发入门

同时,Java的跨平台是以牺牲效率换来对多种平台的兼容性,因而JNI就是这种跨平台的主流实现方式之一。 总之,JNI是一门技术,是Java 与C/C++ 沟通的一门技术。...4,JNI的字符串处理 4.1 native操作JVM JNI会把Java中所有对象当做一个C指针传递本地方法中,这个指针指向JVM内部数据结构,而内部的数据结构在内存中的存储方式是不可见的.只能从JNIEnv...(JNIEnv *env, jobject thiz) { LOGI("崩溃前"); willCrash(); //后面的代码是执行不到的,因为崩溃了 LOGI("崩溃后...不然局部引用会越来越多,最终导致崩溃(在Android低版本上局部引用表的最大数量有限制,是512个,超过则会崩溃)。...参考: Android Developers NDK 指南 C++ 库支持 JNI/NDK开发指南 Android 内存泄露之jni local reference table overflow

1.5K50

初学JNI java中调用c++的函数 helloworld实验

reference https://www.cnblogs.com/liuling/p/2013-12-20.html 简介 利用JNI可以让java的代码调用c/c++的代码。...很多时候,某些功能用Java无法实现,这时候我们就可以利用JNI来调用C或者C++程序来实现。 比如说涉及到底层驱动的一些功能,这就是JNI的强大之处。...但是JNI也有它的缺点,使用java与本地已编译的代码交互,通常会丧失平台可移植性。 以下这个例子,是java调用c++输出hello world的例子。也是我根据博客做的实验的记录。...<< endl; } 这里因为nativeTest_NativeTest.h中引入了jni.h,所以要将jni.h加入vs安装目录下的VC/Include目录中。...jni.h在JDK安装目录下的include中。 同时得将include/win32中的两个头文件jawt_md.h、jni_md.h也导入vs中,放在同上的路径。

93080

JNI 数据类型及Java与C++之间互调

它允许运行在JVM上的Java代码能够与C/C++实现的本地库进行交互。 JNI 数据类型 Java中有两种类型:基本数据类型(int、float、char等)和引用类型(类、对象、数组等)。...JNI定义了一个C/C++类型的集合,集合中每一个类型对应于Java中的每一个类型,其中,对于基本类型而言,JNI与Java之间的映射是一对一的,比如Java中的int类型直接对应于C/C++中的jint...;而对引用类型的处理却是不同的,JNI把Java中的对象当作一个C指针传递本地函数中,这个指针指向JVM中的内部数据结构,而内部数据结构在内存中的存储方式是不可见的,本地代码必须通过在JNIEnv中选择适当的...然后右键打开命令行 在命令行输入 javap -s JNIUtils.class 即可获取到2个方法签名,我这里是JNIUtils获取的两个签名如下: 警告: 二进制文件JNIUtils...因此,使用C++开发JNI时就无需再传递JNIEnv指针变量且在使用JNIEnv_结构体的成员时,直接使用结构体变量指向成员即可。

2.1K10

BreakPad模拟Android native崩溃

1.BreakPad简介 Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。...information),并生成 symbol file processor, 读取 minidump文件 和 symbol file,生成可读的c/c++ Stack trace....一开始本人在编译的时候用的是ndk20的,发现提示C和C++编译器没有设置.经过好几次反复才发现原来是ndk版本太高,导致了用的是clang去编译的,然后就一直抱那个错.后来降低成ndk16就通过了....SMP PREEMPT Tue Oct 25 05:18:00 CST 2016 aarch64 CPU: arm64 8 CPUs GPU: UNKNOWN Crash reason: SIGSEGV...的介绍,我们可知“Crash reason: SIGSEGV /SEGV_MAPERR”代表哪种类型的错误: SIGSEGV 是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。

1.5K20

JNI 从入门实践,万字爆肝详解!

---- 这篇文章是 NDK 系列文章第 5 篇,专栏文章列表: 一、语言基础: 1、NDK 学习路线:怎么学 & 我的经验 2、C 语言基础 3、C ++ 语言基础 4、C/C++ 编译过程:从源码程序运行...通过 JNI 接口,Java 代码可以调用 C/C++ 代码,C/C++ 代码也可以调用 Java 代码。...、数组)传递 JNI 层的只是一个指针,为避免该对象被垃圾回收虚拟机会固定住(pin)对象,在 JNI 方法返回前会阻止其垃圾回收。...+ 数组的数据回写到 Java 数组,并释放 C/C++ 数组 JNI_COMMIT 将 C/C++ 数组的数据回写到 Java 数组,并不释放 C/C++ 数组 JNI_ABORT 不回写数据,但释放...总结 这里,JNI 的知识就讲完了,你可以按照学习路线图来看。下一篇,我们开始讲 Android NDK 开发。关注我,带你建立核心竞争力,我们下次见。

1.8K20
领券