-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathandroid_and_linux_debug.txt
More file actions
121 lines (73 loc) · 3.47 KB
/
android_and_linux_debug.txt
File metadata and controls
121 lines (73 loc) · 3.47 KB
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
android_and_linux_debug
java-exception(in frameworks and app layer wirtten in java codes);native(in userspace,inlcuding native c/c++ app and lib);
kernel(kernel opps and kernel panic in linux kernel mode);external(device its own memory-space adn binary codes);
printk输出,调用控制台驱动输出信息到控制台
动态输出pr_debug/dev_dbg log
include/linux/printk.h里找到pr_debug的定义
三个判断条件决定pr_debug的用法:
1.如果定义了CONFIG_DYNAMIC_DEBUG,就使用动态debug机制dynamic_pr_debug();
2.如果定义了DEBUG,就使用printk(KERN_DEBUG...)
3.默认情况下,不打印。
1.#define CONFIG_DYNAMIC_DEBUG xx --> dynamic_pr_debug(fmt, ##__VA_ARGS__)
2.#define DEBUG xx --> printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__)
KERN_EMERG 0
KERN_ALERT 1
KERN_CRIT 2
KERN_ERR 3
KERN_WARNING 4
KERN_NOTICE 5
KERN_INFO 6
KERN_DEBUG 7
KERN_DEFAULT d
修改控制台log输出级别,只有低于这个级别的log才会被输出,默认是default级别(8),即会输出所有等级的信息
echo 8 > /proc/sys/kernel/printk
vim kernel/printk.c --> #define DEFAULT_CONSOLE_LOGLEVEL 8
dump_stack() 打印堆栈函数 快速清理函数调用关系
adb:adb shell dmesg/adb shell cat proc/kmsg
串口:连接串口线,且确保kernel serial配置项已打开
CONFIG_SERIAL_MSM_HSL=y
CONFIG_SERIAL_MSM_HSL_CONSOLE=y
查看log:logcat
/dev 查看主从设备号
/sys 统一设备模型来管理,提供读写接口方便调试
/sys/block 系统中所有块设备
/sys/bus 内核设备按总线类型分层放置的目录结构
/sys/class 按照设备功能分类的设备模型
/sys/devices 内核对系统分层次表达模型
/sys/kernel 内核所有可调整参数的位置
/sys/module 系统中所有模块信息
/sys/power 系统中电源选项
/proc 主要查询硬件信息,进程状态,系统日志
查看cpu信息 cat /proc/cpuinfo
查看mem信息 cat /proc/meminfo
查看分区信息 cat /proc/partitions
查看进程状态 cat /proc/pid/status
查看进程打开文件 cat /proc/pid/fd
查看日志 cat /proc/kmsg
getevent -l 目录 获取系统的输入事件
setevent 发送模拟事件
set/get/watch prop
top/ps
netstat 显示各种网络相关的信息
vmstat 监控cpu使用率,内存使用,虚拟交换,IO读写
strace -wc ls 跟踪还未启动的程序,启动时开始跟踪
strace -p pid 跟踪已启动的程序,跟踪系统函数调用,并统计调用过程的错误、时间
dumpsys [module name] 查看某个模块的信息
debug-tools:
网络
音频
USB
显示
裸机:JTAG
反编译目标文件和可执行文件:
objdump [option(s)] [files(s)] 确定错误位置?
常用选项:
-x: 以某种分类信息的形式把目标文件的数据组织输出
-t: 输出目标文件的符号表
-h: 输出目标文件的所有段概括
-j ./text/.data –S :输出指定段的信息
-S: C语言与汇编语言同时显示
systrace:来自于android内核例如cpu调度系统,硬盘活动,应用程序线程,生成html网页显示出各种信息
run the strace.py and generate the html -> open this html
cd /home/ckt/Software/sdk/platform-tools/systrace -> python strace.py [] []
找出有问题的帧,找出警告,分析超时线程或函数