记一次jin开发遇到的很欲哭无泪的报错
JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x1388
遇到这个错让人很头疼,字面上的意思就是说你传进来的对象是无效的,这个就很难理解了,要么是null,要么就是好的,无效怎么解释?先不管了,用debug模式来运行应用,会大概定位到出错的地方
图一:
对照着上图来跟这个问题
途中标1的地方告诉我们再调jni里面的GetIntField的方法是出了错(但是,这只是表面现象,是不准确的,但是能打给定位大出错的位置,我们先记住obj的这个0x00001388值,接下来我们看标2的地方,这是方法调用的进栈顺序,对于我们有用的就两行,我们点击下面那一行会定位到出错的位置,如下图:
图二:
标1的地方就是jni提示我们崩的地方,但是,我经过上上下下,反反复复的检查也没检查出来这个方法我传的这个jVideoStreamFormat参数有什么问题,为什么我要找jVideoStreamFormat这个参数而不是其他地方呢,以往的经验告诉我,jni的报错在debug模式下定位的并不十分准确,我只能在他定位的地方周围的变量都翻一遍,图一中我们看到报错的obj的hash值是0x00001388,我们看到标2的地方,hash的只是一样的,那我就确定了,是jVideoStreamFormat这个值有问题,但是问题在哪呢,这时我注意到了标3和4的地方,jAudioStreamFormat这个值为null,startTime和endTime的值为0,这就不可能了,这俩值是我在同一个地方new的:
图三:
确实没得问题,这下不是一个问题了,这些参数的值怎么都乱了,顿时想面壁!
我在短暂的冷静之后又重新从头到尾的捋了一遍,从定义函数的地方
图四:
再到jni里注册函数:
图五(由于方法签名太长,所以截成了两张:
这里我把三处地方都做了对比,终于有了新发现,我在java里定义的native方法的参数类型,startTime 和 endTime是long类型的(图四),但是在jni那层里实现的却是jint类型(图二),于是我把jni层的代码函数参数改成jlong类型的再次运行,
没有出错,oh,Mygod!真是一次惨痛的教训,我们平时在java里long类型转int类型,编辑器都会提示我们强转类型,或者改变类型,但是在传往jni的路上可没人会提醒你,只能自己小心了
记一次jin开发遇到的很欲哭无泪的报错相关推荐
- 记一次线上环境 redis偶尔连接超时报错 解决
记一次线上环境 redis偶尔连接超时报错 解决 贴出本地控制台日志 说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题 因为程序为 springboot 2 spring ...
- Xamarin开发安装Visual Studio 2015 update2报错的解决办法
Xamarin开发安装Visual Studio 2015 update2报错的解决办法 错误信息:update 2 requires a member of the visual studio 20 ...
- 工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component
结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component render function. 代 ...
- VsCode配置Python开发环境后运行代码会报错“无法加载文件 D:\Code\xxx\poetry-demo\.venv\Scripts\Activate.ps1”
问题描述:在VsCode中配置Python开发环境后运行代码会报错"无法加载文件 D:\Code\xxx\poetry-demo\.venv\Scripts\Activate.ps1&quo ...
- 嵌入式linux开发,对pcf8563时钟操作报错:rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable.
一.问题描述. 嵌入式linux开发,对pcf8563时钟操作报错如下: [root@ms ~]# hwclock -s rtc-pcf8563 0-0051: low voltage detecte ...
- 记一次Java代码不执行,也不报错!求大佬赐教!
记一次Java代码不执行,也不报错!求大佬赐教! 发生背景 问题所在 发生背景 实训在做串口通讯的时候,进行数据处理时,代码执行一部分,有一部分没有执行. 十分纳闷,代码如下: /*** 处理返回结果 ...
- 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: multiple definition of `yylloc‘; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0
一.问题描述 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple ...
- 安卓开发——android8.0应用崩溃,报错: Only fullscreen opaque activities can request orientation
上周末升级了最新的MIUI 8.1.18开发版,早早的吃上了奥利奥 Android O(虽然在miui下并没有什么变化(-_-),但还是很开心的,毕竟我的小米MIX2终于可以用到了之前只是内测的全屏手 ...
- VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)
如图在VS中对linux进行远程开发时,编译报错: 貌似是因为在代码中使用了pthread.h的函数,链接库依赖顺序出了问题,我在ubuntu里手动使用gcc main.c -lpthread -o ...
最新文章
- UVA11464偶数矩阵
- 【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
- kubenetes平台监控cAdvisor查看
- 打造自己的 PTM!新词挖掘+预训练
- MQTT 消息通信工具使用
- ios safari 模拟器_iOS 模拟器调试大法了解一下?
- DDos防护系列之2--DDos防御策略
- c语言输出最大的数ns流程图_图8循环结构的NS流程图.ppt
- URAL1325-Dirt
- jsp中打开新的html网页,jsp中用window.open()打开新页面的相关设置
- Android 继承于PopuWindow的自定义弹出窗体
- 阿里视频云web播放器常见问题汇总
- Redis管道技术的使用
- 【Android Studio】Android Studio 搭建开发环境(Linux Ubuntu篇)
- 软件测试工程师必备技能——Linux基础知识
- 第一个PWA程序-聊天室
- 操作系统课程设计——Shell编程(用c编写一个Linux的外壳Shell)
- 计算机教学研讨会方案,临沂大学信息学院计算机教学红色文化教育研讨会实施方案.doc...
- 15天精读掌握《高德纳_具体数学》 第7天 2019.6.3
- Register Form