android雜記:C++文件的添加log方法分享
更新時間:2013年09月25日 16:11:47 作者:
這篇文章介紹了android雜記:C++文件的添加log方法,有需要的朋友可以參考一下
1.添加頭文件
#include <utils/Log.h>
//或者
#include <cutils/Log.h>
這個時候可以使用ALOGE/ALOGI/ALOGW 等方法打印出log
不過有些地方不能這么使用,因為依賴libutils libctuils庫
在mk文件見添加如下依賴編譯即可
#LOCAL_MODULE := ... ...
#base_intermediates := $(call local-intermediates-dir) //該行之下添加,這個貌似是查找依賴文件
LOCAL_SHARED_LIBRARIES += \
libutils libcutils
... ...
include $(BUILD_SHARED_LIBRARY) //該行之上,這時候是開始編譯
2.通常的堆棧
android::CallStack stack;
stack.update(1);
stack.dump("");
這個需要加個頭文件,不過要特別注意一個問題,這個頭必須加在所有頭的末尾,不然用不了滴,尤其是看android源碼里webkit的時候。需要加的頭文件如下:
#include <utils/CallStack.h>
今天有事,后續(xù)補全,如果大家有更好的,或者特殊的情況,歡迎推薦
3.C++另類堆棧
這個方法是可文件控制的。通過對android設(shè)備中的文件讀寫,然后空指針賦值,這樣就可以達到文件控制的目的
該方法好處只要是C、C++文件均可添加此log,無依賴,便捷!也有個不好處,log只能運行到你添加的地方,因為崩庫了,后面的無法運行了。
實現(xiàn)代碼如下:
FILE *fp = NULL; //需要注意
fp = fopen("data/test", "r");
if(NULL == fp)
{
return false; //需要返回值時使用
} esle {
fclose(fp);
int *fp = NULL;
*fp = 100; //空指針賦值出錯,小樣就它錯了
return false; //需要返回值時使用
}
一般崩庫了是看不到堆棧的,我們可以通過反匯編來查看具體的堆棧。
在android里編譯出的庫有兩套:一套無符號的,是查看不了的,另一套是有符號的,我們查看的就是這套,
有符號的編譯出來后是在路徑(\out\target\product\generic\symbols\system\lib)下
android中自帶有arm的反匯編工具,在設(shè)置后編譯環(huán)境后就可以正常使用了,命令如下:
arm-eabi-addr2line -f -e **.so 地址1 地址2 ... ...
復(fù)制代碼 代碼如下:
#include <utils/Log.h>
//或者
#include <cutils/Log.h>
這個時候可以使用ALOGE/ALOGI/ALOGW 等方法打印出log
不過有些地方不能這么使用,因為依賴libutils libctuils庫
在mk文件見添加如下依賴編譯即可
復(fù)制代碼 代碼如下:
#LOCAL_MODULE := ... ...
#base_intermediates := $(call local-intermediates-dir) //該行之下添加,這個貌似是查找依賴文件
LOCAL_SHARED_LIBRARIES += \
libutils libcutils
... ...
include $(BUILD_SHARED_LIBRARY) //該行之上,這時候是開始編譯
2.通常的堆棧
復(fù)制代碼 代碼如下:
android::CallStack stack;
stack.update(1);
stack.dump("");
這個需要加個頭文件,不過要特別注意一個問題,這個頭必須加在所有頭的末尾,不然用不了滴,尤其是看android源碼里webkit的時候。需要加的頭文件如下:
復(fù)制代碼 代碼如下:
#include <utils/CallStack.h>
今天有事,后續(xù)補全,如果大家有更好的,或者特殊的情況,歡迎推薦
3.C++另類堆棧
這個方法是可文件控制的。通過對android設(shè)備中的文件讀寫,然后空指針賦值,這樣就可以達到文件控制的目的
該方法好處只要是C、C++文件均可添加此log,無依賴,便捷!也有個不好處,log只能運行到你添加的地方,因為崩庫了,后面的無法運行了。
實現(xiàn)代碼如下:
復(fù)制代碼 代碼如下:
FILE *fp = NULL; //需要注意
fp = fopen("data/test", "r");
if(NULL == fp)
{
return false; //需要返回值時使用
} esle {
fclose(fp);
int *fp = NULL;
*fp = 100; //空指針賦值出錯,小樣就它錯了
return false; //需要返回值時使用
}
一般崩庫了是看不到堆棧的,我們可以通過反匯編來查看具體的堆棧。
在android里編譯出的庫有兩套:一套無符號的,是查看不了的,另一套是有符號的,我們查看的就是這套,
有符號的編譯出來后是在路徑(\out\target\product\generic\symbols\system\lib)下
android中自帶有arm的反匯編工具,在設(shè)置后編譯環(huán)境后就可以正常使用了,命令如下:
復(fù)制代碼 代碼如下:
arm-eabi-addr2line -f -e **.so 地址1 地址2 ... ...
您可能感興趣的文章:
- Android開發(fā)筆記之:Log圖文詳解(Log.v,Log.d,Log.i,Log.w,Log.e)
- Android系統(tǒng)開發(fā)中l(wèi)og的使用方法及簡單的原理
- android輕松管理安卓應(yīng)用中的log日志 發(fā)布應(yīng)用時log日志全部去掉的方法
- Android將應(yīng)用調(diào)試log信息保存在SD卡的方法
- Android編程之基于Log演示一個activity生命周期實例詳解
- Android 實現(xiàn)自己的LOG信息
- microlog4android將Android Log日志寫到SD卡文件中實現(xiàn)方法
- Android 日志工具(log)的使用方法
- Android開發(fā)實現(xiàn)的Log統(tǒng)一管理類
相關(guān)文章
MT6589平臺通話錄音時播放提示音給對方功能的具體實現(xiàn)
MT6589平臺通話錄音時如何播放提示音給對方,可以通過修改以下文件即可,希望對你有所幫助2013-06-06Android實戰(zhàn)教程第二篇之簡單實現(xiàn)兩種進度條效果
這篇文章主要為大家詳細介紹了Android實戰(zhàn)教程第二篇,簡單實現(xiàn)兩種進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11淺談onTouch先執(zhí)行,還是onClick執(zhí)行(詳解)
onTouch先執(zhí)行,還是onClick執(zhí)行?下面小編就為大家?guī)硪黄獪\談onTouch先執(zhí)行,還是onClick執(zhí)行(詳解)。希望對大家有所幫助。一起跟隨小編過來看看吧2017-03-03android實現(xiàn)定時拍照并發(fā)送微博功能
這篇文章主要為大家詳細介紹了android實現(xiàn)定時拍照并發(fā)送微博功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06Android Retrofit和Rxjava的網(wǎng)絡(luò)請求
這篇文章主要介紹了Android Retrofit和Rxjava的網(wǎng)絡(luò)請求的相關(guān)資料,需要的朋友可以參考下2017-03-03Android實現(xiàn)簡單斷點續(xù)傳和下載到本地功能
這篇文章主要為大家詳細介紹了Android實現(xiàn)簡單斷點續(xù)傳和下載到本地功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11