今天就跟大家聊聊有關(guān)C/C++中如何使用LOG輸出進行跟蹤,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)建站-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機房租用、服務(wù)器機柜租用、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),聯(lián)系電話:18980820575
我們在JAVA的調(diào)試中經(jīng)常會用到Log.i什么的方法進行輸出跟蹤,這一篇我主要來說一下在NDK開發(fā)中,C++的代碼中怎么實現(xiàn)日志輸出。
實現(xiàn)方法
在c++文件中引用android/log.h頭文件。
頭文件中__android_log_print方法就是我們的日志輸出方法。
通過#define的宏定義組裝我們的__android_log_print方法。
在想輸出日志的地方直接進行輸出即可。
代碼實現(xiàn)
我們還是用原來的那個Demo程序,按照我們的實現(xiàn)方法來進行
在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__)
在想輸出日志的地方直接進行輸出即可
我們直接在上一章的兩個數(shù)相乘的方法中進行日志輸出看看結(jié)果,改造一下
extern "C"
JNIEXPORT jint JNICALL
Java_dem_vac_vaccaendk_MainActivity_plusFromJNI(JNIEnv *env, jobject instance, jint a, jint b) {
//首先獲取class,這里傳入的參數(shù)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參數(shù)
LOGI("a=%d",a);
LOGI("b=%d",b);
//調(diào)用訪法
//第一個參數(shù)為jobject的這是傳入的是jobject是Mainactivity,
//如果在CallIntMethod里面直接用傳入的肯定會出錯,因為我們的
//方法是在VaccaeJNI的類里面,所以我們首先要實例化那個類,再調(diào)用
jobject jobj = env->AllocObject(jcls);
jint retint = env->CallIntMethod(jobj, jmethod, a, b);
//輸出調(diào)用相乘方法得到的結(jié)果
LOGI("result=%d",retint);
return retint;
}
接下來我們看一下運行后的結(jié)果
從上圖中我們可以看到,在Logcat的日志中已經(jīng)輸出我們每一步的輸出,這樣在調(diào)試C/C++的代碼中可以通過輸出方式找到哪一步出的問題,方便我們開發(fā),提高效率。
看完上述內(nèi)容,你們對C/C++中如何使用LOG輸出進行跟蹤有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。