您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關C/C++中如何使用LOG輸出進行跟蹤,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
我們在JAVA的調試中經常會用到Log.i什么的方法進行輸出跟蹤,這一篇我主要來說一下在NDK開發中,C++的代碼中怎么實現日志輸出。
實現方法
在c++文件中引用android/log.h頭文件。
頭文件中__android_log_print方法就是我們的日志輸出方法。
通過#define的宏定義組裝我們的__android_log_print方法。
在想輸出日志的地方直接進行輸出即可。
代碼實現
我們還是用原來的那個Demo程序,按照我們的實現方法來進行
在c++文件中引用android/log.h頭文件
我們打開native-lib.cpp文件,在頂部加入引用android/log.h,如下圖
通過#define的宏定義組裝我們的__android_log_print方法
代碼為:
#define LOG_TAG "System.out"#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
在想輸出日志的地方直接進行輸出即可
我們直接在上一章的兩個數相乘的方法中進行日志輸出看看結果,改造一下
extern "C"
JNIEXPORT jint JNICALL
Java_dem_vac_vaccaendk_MainActivity_plusFromJNI(JNIEnv *env, jobject instance, jint a, jint b) {
//首先獲取class,這里傳入的參數jobject是代表了Mainactivity,所以我們要自己查找
jclass jcls=env->FindClass("dem/vac/vaccaendk/VaccaeJNI");
if (jcls == NULL) {
return 0;
}
//獲取方法
jmethodID jmethod = env->GetMethodID(jcls, "Plus", "(II)I");
if(jmethod==NULL) {
return 0;
}
//輸出傳入的a和b參數
LOGI("a=%d",a);
LOGI("b=%d",b);
//調用訪法
//第一個參數為jobject的這是傳入的是jobject是Mainactivity,
//如果在CallIntMethod里面直接用傳入的肯定會出錯,因為我們的
//方法是在VaccaeJNI的類里面,所以我們首先要實例化那個類,再調用
jobject jobj = env->AllocObject(jcls);
jint retint = env->CallIntMethod(jobj, jmethod, a, b);
//輸出調用相乘方法得到的結果
LOGI("result=%d",retint);
return retint;
}
接下來我們看一下運行后的結果
從上圖中我們可以看到,在Logcat的日志中已經輸出我們每一步的輸出,這樣在調試C/C++的代碼中可以通過輸出方式找到哪一步出的問題,方便我們開發,提高效率。
看完上述內容,你們對C/C++中如何使用LOG輸出進行跟蹤有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。