业务场景与现象:
一个保存动作,执行完应用便崩溃。崩溃日志为: fault addr xxxxxx 等一堆无意义java层堆栈。
JNI异常问题的常见处理办法:定位问题代码
其方式多为:
- log打印
- debug 断点
- 自行语法检查
这个问题其实非常非常简单,就是自己加了一个接口并且希望返回一些内容,但在jni代码中 忘了返回内容,由于IDE并未提示也未报错,一直未能找到原因。
过程:
从debug情况看,每一行均可正常执行,执行完便崩溃。
从log日志看,每一行均可打印完成,最后一个打印完成后便崩溃。
按网上的 jni exception 检测,从方法执行第一行起就崩溃。
经过大段时间的调试,最后才找问题关键点:
- JNI 方法 返回值定义了 不接收 不会崩溃
- JNI 方法 返回值定义了 接收 但实际上JNI方法无返回 会直接崩溃
上个图吧:
没有返回值编译不会报错,但如果要用,运行时会报错,而且无法捕获。
又是一个巨简单问题导致的大耗时。没认真学 JNI 就是如此下场,临阵磨刀,杀不了敌人,只能杀自己。
本站由以下主机服务商提供服务支持:
0.0
0.0