国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

舉例說明android源代碼調(diào)試中加入的log方法

2024-04-27 13:53:49
字體:
供稿:網(wǎng)友

在查看android源代碼過程中, 只是看代碼, 往往沒有辦法驗(yàn)證對(duì)代碼的估測(cè)是否準(zhǔn)確, 這時(shí)我們經(jīng)常通過插入自己的log的方式來測(cè)試 某個(gè)函數(shù)是否調(diào)用到, 某個(gè)參數(shù)在運(yùn)行過程中的值是多少. 下面jwisp把a(bǔ)ndroid各層中加入log語句的方法整理如下.

1. java代碼

在android源碼中, 只要是java代碼基本上都在framework中 , 所有的java代碼中, 加入logo的方式也就三步:

(a) 導(dǎo)入log包

import android.util.Log;

(b) 定義log標(biāo)簽

很多java類的第一句代碼已經(jīng)定義了當(dāng)前類的TAG,比如DeviceStorageMonitorService.java類中的第一句

private static final String TAG = "DeviceStorageMonitorService";

當(dāng)然我們也可以定義自己的標(biāo)簽, 以便在從上到下中, 只打印我們自己關(guān)注的log

private static final String MYTAG = "MytagTest";

(c) 添加log語句, Log的輸出有 : v, i, d, w, e 五種級(jí)別

比如, 我們需要在電池管理BatteryService.java中打印出每次電量變化后的的log, 怎么實(shí)現(xiàn)呢

在BatteryService.java(frameworks/base/services/java/com/android/server)中找到update()方法, 在其中添加如下代碼:

if (mBatteryLevel != mLastBatteryLevel){ Log.i(MYTAG, "BatteryService.java -> update : mBatteryLevel = " +mBatteryLevel);}

在設(shè)備或模擬器運(yùn)行后, 只需要敲入如下命令即可在電量發(fā)生變化時(shí), 打印出最新的電量值.

logcat -s MytagTest

2. c/c++代碼

在各種jni, hal層, 驅(qū)動(dòng)層都是c和c++的代碼, 在這里插入log, 可以幫助我們找到上層調(diào)用下來的參數(shù)是多少, 調(diào)用的是哪個(gè)具體函數(shù)等.

網(wǎng)上很多人給的建議還要修改android.mk文件, 其實(shí)遠(yuǎn)不用那么麻煩.

(a) 添加tag標(biāo)簽, 很多tag已經(jīng)添加好了, 我們可以注釋掉系統(tǒng)的tag, 然后添加自己的tag

比如在HAL層中的距離傳感器 ProximitySensor.cpp中

在代碼的最上方include之前

#define LOG_TAG "ProximitySensor"

(b) 引入log庫

#include <utils/Log.h>

(c) 加入log語句

在這一步中, 和java不同的是, 不能加入不同的tag標(biāo)簽只能用當(dāng)前源文件的標(biāo)簽

比如jwisp想從距離傳感器中輸出, 每次從驅(qū)動(dòng)上報(bào)來的psensor數(shù)值是多少

在readEvents函數(shù)中的while循環(huán)中加入

LOGI("ProximitySensor.cpp -> readEvent() : event->value = %d", event->value);

3. 在mk文件中加入log

很多人都不知道, mk文件在運(yùn)行的時(shí)候(也就是android源碼編譯的時(shí)候)也可以輸出log, 這大大的方便我們調(diào)試編譯信息.

在make文件中有兩種log級(jí)別error和warning :

$(error TEXT...)$(warning TEXT...)

用error可以準(zhǔn)確定位我們需要的log信息, 因?yàn)榫幾g會(huì)終止, 一般來說終止的地方會(huì)有我們的log信息,

warning不會(huì)終止在我們的log信息上, 大家可以根據(jù)自己的情況來選擇.

另外,還可以在編譯輸出的log語句中加入mk定義的變量信息

舉例, 比如我們需要知道libsensors目錄下的so編譯后叫什么名字, 通過在此目錄下的android.mk文件中加入以下代碼來輸出log:

在LOGCAL_MODULE 的定義之后, 寫上

$(error module is $(LOCAL_MODULE))

輸出結(jié)果:

hardware/sansung/libsensors/Android.mk:27: *** module is Sensors.sansung. Stop.

Over

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 文登市| 高雄市| 定兴县| 万宁市| 长子县| 兰坪| 云安县| 象山县| 吴忠市| 西和县| 石屏县| 瑞丽市| 磐安县| 报价| 资兴市| 苏尼特右旗| 家居| 额尔古纳市| 蓝山县| 海晏县| 五寨县| 南陵县| 泾源县| 河池市| 尤溪县| 安乡县| 修武县| 屏山县| 桐城市| 刚察县| 冕宁县| 林西县| 北川| 乳山市| 双辽市| 泽库县| 响水县| 卓资县| 连城县| 南通市| 南京市|