日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

logcat使用

發(fā)布時(shí)間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 logcat使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

做android有些日子了,只是對(duì)主要的logcat的具體使用方法還是非常模糊,今天有空,學(xué)習(xí)一下。

logcat能夠在adb中使用,也能夠直接在命令行下使用。
?
logcat [options] [filterspecs]
logcat的選項(xiàng)包含:
? -s?????????????? ?????? 默認(rèn)設(shè)置過濾器,如指定'*:s'.
? -f <filename>? ??輸出到文件,默認(rèn)情況是標(biāo)準(zhǔn)輸出.
? -r [<kbytes>]?? ?循環(huán)log的字節(jié)數(shù)(默覺得16),須要-f.
? -n <count>????? ?設(shè)置循環(huán)log的最大數(shù)目,默認(rèn)是4
? -v <format>???? ?設(shè)置log的打印格式,? <format> 是以下的一種:
???????????????????? ?????? brief process tag thread raw time threadtime long.
? -c????????????????????? 清除全部log并退出.
? -d??????????????????? ?得到全部log并退出 (不堵塞).
? -g???????????????????? 得到環(huán)形緩沖區(qū)的大小并退出.
? -b <buffer>??? ??請(qǐng)求不同的環(huán)形緩沖區(qū)('main' (默認(rèn)), 'radio', 'events').
? -B???????????????????? 輸出log到二進(jìn)制中.

?

1. ?日志過濾器設(shè)置
??每個(gè)輸出的Android日志信息都有一個(gè)標(biāo)簽和它的優(yōu)先級(jí).
??日志的標(biāo)簽是系統(tǒng)部件原始信息的一個(gè)簡(jiǎn)要的標(biāo)志。(比方:“View”就是查看系統(tǒng)log的標(biāo)簽,“RFID_HAL”就是查看RFID的HAL層log的標(biāo)簽)。
??優(yōu)先級(jí)有下列集中,是依照從低到高順利排列的:
??V — Verbose (lowest priority)
??D — Debug
??I — Info
??W — Warning
??E — Error
??F — Fatal
??S — Silent (highest priority, on which nothing is ever printed)無log打印

??在執(zhí)行l(wèi)ogcat的時(shí)候在前兩列的信息中你就能夠看到 logcat 的標(biāo)簽列表和優(yōu)先級(jí)別,它是這樣標(biāo)出的:<priority>/<tag>.
??以下是一個(gè)logcat輸出的樣例,它的優(yōu)先級(jí)就似乎I,標(biāo)簽就是ActivityManage:
??I/ActivityManager(? 585): Starting activity: Intent { action=android.intent.action...}
??
??過濾器語句依照以下的格式描寫敘述:tag:priority, tag 表示是標(biāo)簽,priority是表示標(biāo)簽log的最低等級(jí),
??你能夠在過濾器中多次寫tag:priority。
??
??比如:adb logcat ActivityManager:I MyApp:D *:S? 或者 adb logcat -s ActivityManager:I MyApp:D
??上面表達(dá)式的最后的元素 *:S ,,是設(shè)置全部的標(biāo)簽為”silent”,全部日志僅僅顯示有”ActivityManager”和“MyApp”的,用 *:S 的還有一個(gè)用處是能夠確保日志輸出的時(shí)候是依照過濾器的說明限制的,也讓過濾器也作為一項(xiàng)輸出寫到日志中。
??
2.? log輸出格式設(shè)置
??能夠改動(dòng)日志的輸出格式,所以能夠顯示出特定的元數(shù)據(jù)域。能夠通過 -v 選項(xiàng)得到格式化輸出日志的相關(guān)信息。
??
??brief — Display priority/tag and PID of originating process (the default format).
??process — Display PID only.
??tag — Display the priority/tag only.
??thread — Display process:thread and priority/tag only.
??raw — Display the raw log message, with no other metadata fields.
??time — Display the date, invocation time, priority/tag, and PID of the originating process.
??long — Display all metadata fields and separate messages with a blank lines.
??樣例:
??brief -- P/tag (876): message? (默認(rèn)格式)
??process -- (876): message
??tag -- P/tag: message
??thread -- P/tag( 876:0x37c) message
??raw -- message
??time -- 09-08 05:40:26.729 P/tag ( 876): message
??threadtime -- 09-08 05:40:26.729 876 892 P/tag : message
??long -- [ 09-08 05:40:26.729 876:0x37c P/tag ] message

?

3. ?查看可用日志緩沖區(qū)
??Android日志系統(tǒng)有循環(huán)緩沖區(qū),并非全部的日志系統(tǒng)都有默認(rèn)循環(huán)緩沖區(qū)。
??[adb] logcat [-b <buffer>]
??radio — ?查看和radio telephony相關(guān)的緩沖區(qū)
??events — ?查看和事件相關(guān)的的緩沖區(qū)
??main — ??查看基本的日志緩沖區(qū)
??
4.?log源代碼頭文件
?4.1 java
???其實(shí)LogCat的功能是由Android的類android.util.Log決定的,在程序中l(wèi)og的用法例如以下所看到的:
???Log.v() -------------------- VERBOSE
???Log.d() -------------------- DEBUG
???Log.i() -------------------- INFO
???Log.w() -------------------- WARN
???Log.e() -------------------- ERROR
???以上log的級(jí)別依次升高,Debug信息應(yīng)當(dāng)僅僅存在于開發(fā)中,INFO、 WARN、ERROR這3種log將出如今公布版本號(hào)中。

???對(duì)于Java類,能夠聲明一個(gè)字符串常量TAG,LogCat能夠依據(jù)它來區(qū)分不同的log.
???比如,在計(jì)算器(Calculator)的類中,定義例如以下所看到的:
???public class Calculator extends Activity {
???/* ...... */
?????? private static final String LOG_TAG = "Calculator";
?????? private static final boolean DEBUG? = false;
?????? private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
???/* ...... */
?? ??由此,全部在Calculator中使用的log,均以“Calculator”為開頭。
??
? 4.2 FW and HAL
?? ??JNI層代碼需包括頭文件frameworks/base/include/utils/Log.h,實(shí)際上這個(gè)頭文件include了HAL層代碼使用的頭文件system/core/include/cutils/log.h
?? ??//#define? NDEBUG
?? ??//#define? LOG_NDEBUG? 0
?? ??#define? LOG_TAG? "RFID_HAL"
???#include <cutils/log.h>
???
???這里對(duì)能夠輸出Verbose級(jí)別的log的設(shè)置,邏輯上有點(diǎn)反,實(shí)際上在log.h文件開始就有例如以下定義:
???#ifndef LOG_NDEBUG
???#ifdef NDEBUG
???#define LOG_NDEBUG 1
???#else
???#define LOG_NDEBUG 0
???#endif
???#endif
???
???#ifndef LOG_TAG
???#define LOG_TAG NULL
???#endif
???默認(rèn)情況下,LOG_NDEBUG = 0
???
???以下是和Verbose主要的log相關(guān)的宏定義:
???#ifndef LOGV
???#if LOG_NDEBUG
???#define LOGV(...)?? ((void)0)
???#else
???#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))// 僅僅有在為0的情況下這個(gè)宏才有意義
???#endif
???#endif
???
???#define CONDITION(cond)???? (__builtin_expect((cond)!=0, 0))
???
???#ifndef LOGV_IF
???#if LOG_NDEBUG
???#define LOGV_IF(cond, ...)?? ((void)0)
???#else??????// 僅僅有在為0的情況下這個(gè)宏才有意義
???#define LOGV_IF(cond, ...) /
?????? ( (CONDITION(cond)) /
?????? ? ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) /
?????? : (void)0 )
???#endif
???#endif
???
???...
???#ifndef IF_LOGV
???#if LOG_NDEBUG
???#define IF_LOGV() if (false)
???#else
???#define IF_LOGV() IF_LOG(LOG_VERBOSE, LOG_TAG)
???#endif
???#endif

???綜上,代碼中假設(shè)須要打開VERBOSE級(jí)別的log,僅僅須要定義#define? LOG_NDEBUG? 0或者干脆不要定義;假設(shè)須要關(guān)閉VERBOSE級(jí)別的log,能夠定義#define? LOG_NDEBUG? 1或者#define? NDEBUG,二者選一就可以。
???
參考文件:
???http://blog.csdn.net/czbever/archive/2010/09/27/5910640.aspx
???http://jiahuhuan.blog.163.com/blog/static/13024124620099179491291/
???http://www.javaeye.com/topic/477112

總結(jié)

以上是生活随笔為你收集整理的logcat使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。