NDK 异常检测与抛出
来源:互联网 发布:centos 7 编辑:程序博客网 时间:2024/06/05 13:11
1.定位so库中的异常
http://www.csdn.net/article/2014-12-30/2823366-Locate-Android-NDKAndroid
2.在代码中捕获异常
NDK 是native 编程的开发环境,使用的是C或C++语言,在这个过程中,更多的是使用c与c++的混编,因为在计算机底层,c提供了丰富的函数库,所以即使使用C++,也需要不可避免的进行c libs的封装!
对于c和c++而言,一般来说潜在的异常原因很难被发现,因此我们需要进一步的抛出异常来得到错误的原因!!
在NDK交互的过程中,JNIEnv 提供了异常抛出和捕获的方法,当然C++本身也带有异常抛出的方法,但实际开发中国,C++的异常捕获处理微不足道!
先来看看异常的抛出
static void ThrowException(JNIEnv * env,const char * className,const char * message){jclass objClass = env->FindClass(className);if(objClass!=NULL){ //注意,这种方式抛出的异常一般不会导致程序崩溃,因为该异常和jvm无关联,但是如果调用的java方法抛出的异常,有可能导致程序崩溃 env->ThrowNew(objClass,message); if(0!=env->ExceptionOccurred())//检测是否有异常发生 {env->ExceptionClear();//清除异常堆栈 }env->DeleteLocalRef(objClass);}}
用法:(注意)
ThrowErrorException(env,"java/io/IOException","程序读取失败");
抛出带错误的异常:
static void ThrowErrorException(JNIEnv * env,const char * className,int errNum){char buffer[MAX_LOG_MESSAGE_LENGTH];if(-1==strerror_r(errNum,buffer,MAX_LOG_MESSAGE_LENGTH)){strerror_r(errno,buffer,MAX_LOG_MESSAGE_LENGTH);}char logTag[MAX_LOG_MESSAGE_LENGTH];sprintf(logTag,"%s[%d].%s",__FILE__,__LINE__,__FUNCTION__);Log::I(logTag,"ThrowErrorException");ThrowException(env,className,buffer);}
用法
ThrowErrorException(env,"java/io/IOException",errno);
0 0
- NDK 异常检测与抛出
- auto_ptr与异常抛出
- 安全性检验与异常抛出
- Delphi 异常抛出与捕获
- 事务一致性 与异常抛出
- C#抛出异常与获取异常
- OC抛出异常与自定义异常类
- JAVA捕获异常与抛出异常
- JavaScript 异常与捕获(抛出异常)
- Android NDK 学习之在C中抛出异常
- NDK-TCP连接异常断开检测
- http自定义超时检测方法、主动抛出异常
- opencv 检测抛出异常 +&…
- 重新抛出异常与 public Throwable fillInStackTrace()
- 重新抛出异常与 public Throwable fillInStackTrace()
- JAVA程序中抛出与声明异常
- java异常的捕获与抛出原则
- java异常的捕获与抛出原则
- 单例模式
- 关于bootstrap中的Glyphicons 字体图标的知识点
- APK file does not exist on disk问题解决
- OpenStack——Neutron安装
- 简单的二级导航页面(纯css实现,运用display属性hover)
- NDK 异常检测与抛出
- android:windowSoftInputMode属性详解
- HDU2594-Simpsons’ Hidden Talents
- Sparse Graph(HDU 5876)
- spring定时任务配置
- 如何关闭centos的防火墙
- 超级详细的iptables介绍
- butterknife绑定之后view依然为空
- tjut 3595