-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathandroid_log.txt
190 lines (75 loc) · 3.84 KB
/
android_log.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
android_log
目的:记录运行情况,解决问题
构成:time,grade,tag,pid,message
用户空间的buffer类型(/dev/log):main,events,radio,system
用户空间等级:debug,info,error,verbose,warn
内核等级:KERN_WARNING, KERN_INFO, KERN_DEBUG...
优先级由低到高如下:
•V — Verbose (lowest priority)
•D — Debug
•I — Info
•W — Warning
•E — Error
•F — Fatal
•S — Silent (nothing is ever printed)
WRITE:写入log会反馈给我们的信息
Pwd : system/core/liblog/logd_write_kern.c
App&Framework:
private static final String TAG = “XXX";
* Log.d(TAG,”any thing useful”);
Native:
#define LOG_TAG ”XXX”
LOGV(" any thing useful.");
kernel:
printk(KERN_ALERT "anything useful.");
Event:
private static final String TAG = “XXX";
EventLog.writeEvent(TAG, “any thing useful” );
System:
private static final String TAG = “XXX";
Slog.i(TAG, “any thing useful” );
* Radio:
private static final String TAG = “XXX";
Log.i(TAG, “any thing useful” );
if ((bufID != LOG_ID_RADIO) &&
(!strcmp(tag, "HTC_RIL") ||
!strncmp(tag, "RIL", 3) || /* Any log tag with "RIL" as the prefix */
!strncmp(tag, "IMS", 3) || /* Any log tag with "IMS" as the prefix */
!strcmp(tag, "AT") ||
!strcmp(tag, "GSM") ||
!strcmp(tag, "STK") ||
!strcmp(tag, "CDMA") ||
!strcmp(tag, "PHONE") ||
!strcmp(tag, "SMS"))) {
bufID = LOG_ID_RADIO;
...
}
READ:阅读log
adb shell logcat
adb shell logcat *:e 设置过滤器,大小写不敏感
adb shell logcat –s ActivityManage 查看tag是ActivityManage的log
adb shell logcat –v time 打印出带有时间戳的log,设置输出格式(brief,process,tag,thread,raw,time,threadtime,long),默认是brief
adb shell logcat –b event/main.. 观察哪一个buffer的log,加载一个环形缓冲区来查看日志文件(main,events,system,radio),默认是main
adb logcat ActivityManager:I MyApp:D *:S 过滤器语句格式:tag:priority,滤除标签为”ActivityManager”和优先级为”Info”以上的和标签为”MyApp”和优先级为”Debug”以上的
元素 *:S ,,是设置所有的标签为”silent”,所有日志只显示有”View”and“MyApp”的
cat /tmp/thread.log|awk '{print $2}'|sort -n|uniq log里的第二列数据(在这里指的是pid)提取出来进行无重复项的排序
cat /tmp/thread.log|awk '$2 ~/PID:/'|awk '$3 /TID)/'|grep "^E" ^E查找E开头的行
adb logcat |grep -e"tag1" 输出有tag1关键字的行,tag1内容可自己指定,-E是后面可以接正则表达式
adb shell logcat *:w 前提是分析好它到底是属于哪一个buffer的(main,system,radio,events),再过滤出那个buffer里等级大于等于warning的log,优先级排序见本文件最上面部分。
adb shell dmesg cat /proc/kmsg 查看内核缓冲区信息
adb shell dumpstate 各类信息,比如进程信息,内存信息,进程是否异常,kernnel的log等
adb shell dumpcrash
adb shell dumpsys 查询所有service的状态
-s 设置过滤器,例如指定 '*:s'
-f <filename> 输出到文件,默认情况是标准输出
-v <format> 设置log的打印格式, <format> 是下面的一种:brief process tag thread raw time threadtime long
-c 清除所有log并退出
-d 得到所有log并退出 (不阻塞)
-g 得到环形缓冲区的大小并退出
-b 请求不同的环形缓冲区
ANR(Application Not Responding):
analyze
data/anr/
grep -v "netstats_mobile_sample\|auditd\|…." events_log.txt | tee events_am.txt
trace文件在/data/anr/目录下面
2015-11-21