从JNI调用异常.printStackTrace()。

 2023-01-19    354  

问题描述

问题是找出哪些Java函数调用一些JNI函数.在Java中,这将通过new Exception.printStackTrace()实现,但这必须从本机(JNI)函数完成.

由于以后找到您自己的代码的最简单方法是将其发布在’网络中,所以我既要发布问题又发布答案.

从JNI调用异常.printStackTrace()。

推荐答案

new Exception.printStackTrace()的JNI类似物是:

//#include <android/log.h>
//#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG  , "~~~~~~", __VA_ARGS__)
//#define DLOG(...) __android_log_print(ANDROID_LOG_DEBUG  , "~~~~~~", __VA_ARGS__)
void printStackTrace(JNIEnv *env) {
LOGD("###################################################################################printStackTrace{");
    jclass cls = env->FindClass("java/lang/Exception");
    if (cls != NULL) {
        jmethodID constructor = env->GetMethodID(cls, "<init>", "()V");
        if(constructor != NULL) {
            jobject exc = env->NewObject(cls, constructor);
            if(exc != NULL) {
                jmethodID printStackTrace = env->GetMethodID(cls, "printStackTrace", "()V");
                if(printStackTrace != NULL) {
                    env->CallObjectMethod(exc, printStackTrace);
                } else { DLOG("err4"); }
            } else { DLOG("err3"); }
            env->DeleteLocalRef(exc);
        } else { DLOG("err2"); }
    } else { DLOG("err1"); }
    /* free the local ref */
    env->DeleteLocalRef(cls);
LOGD("###################################################################################printStackTrace}");
}

其他推荐答案

顺便说一句,您可以从本机层到Java扔一个异常:)
这样的东西:

jint throwOutOfMemoryError( JNIEnv *env, char *message ){
    jclass       exClass;
    char *className = "java/lang/OutOfMemoryError" ;

    exClass = (*env)->FindClass( env, className );
    if ( exClass == NULL ){
        return throwNoClassDefError( env, className );
    }
    return (*env)->ThrowNew( env, exClass, message );
}

或如果您有例外的实例,只需将其扔进Java层,然后在Java中获取堆栈跟踪.

以上所述是小编给大家介绍的从JNI调用异常.printStackTrace()。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25796.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。