1、查看进程三种方式
ps -A; | ps -aux | ps -C processName |
---|
2、处理进程相关
./gdb attach processID | 不带参数 |
---|---|
gdb --args ./abd arg1 arg2 | 带参数 |
kill -9 processID | 关闭进程 |
3、忽略一些信号量,让程序继续运行:
handle SIG32 noprint nostop | 对应GDB中经常出现的信号量,可以相同处理 |
---|
4、查看函数/全局变量地址
i func classA::abc
i addr namespace1::g_val1
5、断点相关
b *函数地址 | C++函数打断点:如:b *0xb20efd1c |
---|---|
b func1 | c语言写的函数可以直接打断点到接口 因为函数名不重复 |
d 5 | 删除第五个断点 |
disable/enable | 不使能/使能断点,但不删除 |
i b | 查看所有断点信息 |
d | 删除所有断点 |
6、运行相关
c | 打完断点需要继续执行0下去 |
---|---|
n | 运行一行 |
n 5 | 执行5行,不进入函数 |
step 5 | 执行5行,进入函数 |
7、查看寄存器值相关
断点断到函数后,查看寄存器地址 info registers(arm寄存器函数中前三个参数在r1,r2,r3,后面的参数在sp栈里,返回值地址是lr,函数返回值存在r0里)
i r | 显示全部寄存器内容 |
---|---|
x | examine命令(简写是x)来查看内存地址中的值 |
x /3xh 0x54320 | 表示从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,x表示按十六进制显示。 |
p *0x98529ad4 | 打印信息 |
i var 变量名 | 查看变量的值 |
p $r1 = 0x1; | 更改函数参数的值:将第一个参数改为1 |
set {unsigned int}0xa823d2 = 0x1 | 按地址写值 |
info locals/info args | 打印出当前函数的参数名及其值 |
8、函数相关
bt | 查看调用栈 |
---|---|
return (int)0 | 强制函数返回 |
finish | 执行完改函数返回 |
call (int)0x1238217(int) | 强行调用某函数:返回值int,0x1238217为函数指针,参数为int |
9、查看上下文
l | 显示当前代码前后5行内容 |
---|---|
l abc.cpp:20 | 显示abc.cpp文件第20行的前后5行内容 |