android ndk调用Log.getStackTraceString(new Throwable())输出堆栈信息

	//String str = Log.getStackTraceString(new Throwable());
	//Log.d("yunshouhu", str);

	jclass jcl_Log = (*env)->FindClass(env, "android/util/Log");
	jmethodID mid_getStackTraceString = (*env)->GetStaticMethodID(env, jcl_Log, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;");

	jclass cls_Throwable = (*env)->FindClass( env, "java/lang/Throwable");
	jmethodID fn_Throwable = (*env)->GetMethodID(env, cls_Throwable, "", "()V" );
	jobject obj_Throwable = (*env)->NewObject(env, cls_Throwable, fn_Throwable);

	jstring trace = (*env)->CallStaticObjectMethod(env, jcl_Log, mid_getStackTraceString,obj_Throwable);

	const char *trace_str = (*env)->GetStringUTFChars(env, trace, 0);
	LOGI("%s",trace_str);

	(*env)->DeleteLocalRef(env, jcl_Log);
	(*env)->DeleteLocalRef(env, cls_Throwable);
	(*env)->DeleteLocalRef(env, obj_Throwable);

	(*env)->ReleaseStringUTFChars(env, trace, trace_str);
	(*env)->DeleteLocalRef(env,trace);

你可能感兴趣的:(android,ndk)