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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

logcat使用

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 logcat使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

?

1. ?日志過濾器設置
??每個輸出的Android日志信息都有一個標簽和它的優先級.
??日志的標簽是系統部件原始信息的一個簡要的標志。(比方:“View”就是查看系統log的標簽,“RFID_HAL”就是查看RFID的HAL層log的標簽)。
??優先級有下列集中,是依照從低到高順利排列的:
??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打印

??在執行logcat的時候在前兩列的信息中你就能夠看到 logcat 的標簽列表和優先級別,它是這樣標出的:<priority>/<tag>.
??以下是一個logcat輸出的樣例,它的優先級就似乎I,標簽就是ActivityManage:
??I/ActivityManager(? 585): Starting activity: Intent { action=android.intent.action...}
??
??過濾器語句依照以下的格式描寫敘述:tag:priority, tag 表示是標簽,priority是表示標簽log的最低等級,
??你能夠在過濾器中多次寫tag:priority。
??
??比如:adb logcat ActivityManager:I MyApp:D *:S? 或者 adb logcat -s ActivityManager:I MyApp:D
??上面表達式的最后的元素 *:S ,,是設置全部的標簽為”silent”,全部日志僅僅顯示有”ActivityManager”和“MyApp”的,用 *:S 的還有一個用處是能夠確保日志輸出的時候是依照過濾器的說明限制的,也讓過濾器也作為一項輸出寫到日志中。
??
2.? log輸出格式設置
??能夠改動日志的輸出格式,所以能夠顯示出特定的元數據域。能夠通過 -v 選項得到格式化輸出日志的相關信息。
??
??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? (默認格式)
??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. ?查看可用日志緩沖區
??Android日志系統有循環緩沖區,并非全部的日志系統都有默認循環緩沖區。
??[adb] logcat [-b <buffer>]
??radio — ?查看和radio telephony相關的緩沖區
??events — ?查看和事件相關的的緩沖區
??main — ??查看基本的日志緩沖區
??
4.?log源代碼頭文件
?4.1 java
???其實LogCat的功能是由Android的類android.util.Log決定的,在程序中log的用法例如以下所看到的:
???Log.v() -------------------- VERBOSE
???Log.d() -------------------- DEBUG
???Log.i() -------------------- INFO
???Log.w() -------------------- WARN
???Log.e() -------------------- ERROR
???以上log的級別依次升高,Debug信息應當僅僅存在于開發中,INFO、 WARN、ERROR這3種log將出如今公布版本號中。

???對于Java類,能夠聲明一個字符串常量TAG,LogCat能夠依據它來區分不同的log.
???比如,在計算器(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,實際上這個頭文件include了HAL層代碼使用的頭文件system/core/include/cutils/log.h
?? ??//#define? NDEBUG
?? ??//#define? LOG_NDEBUG? 0
?? ??#define? LOG_TAG? "RFID_HAL"
???#include <cutils/log.h>
???
???這里對能夠輸出Verbose級別的log的設置,邏輯上有點反,實際上在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
???默認情況下,LOG_NDEBUG = 0
???
???以下是和Verbose主要的log相關的宏定義:
???#ifndef LOGV
???#if LOG_NDEBUG
???#define LOGV(...)?? ((void)0)
???#else
???#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))// 僅僅有在為0的情況下這個宏才有意義
???#endif
???#endif
???
???#define CONDITION(cond)???? (__builtin_expect((cond)!=0, 0))
???
???#ifndef LOGV_IF
???#if LOG_NDEBUG
???#define LOGV_IF(cond, ...)?? ((void)0)
???#else??????// 僅僅有在為0的情況下這個宏才有意義
???#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

???綜上,代碼中假設須要打開VERBOSE級別的log,僅僅須要定義#define? LOG_NDEBUG? 0或者干脆不要定義;假設須要關閉VERBOSE級別的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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。