1.修改变量值:set variable=value 或者 print variable=value
2.检查内存:x /NFU addr , 其中N代表重复数,F代表输出格式,U代表每个数据单位的大小。
F:
'x' 16进制整数格式
'd' 有符号十进制整数格式
'u' 无符号十进制整数格式
'f' 浮点数格式
U:
b :字节(byte)
h :双字节数值
w :四字节数值
g :八字节数值
eg: x/4ub 0x4000
会以无符号十进制整数格式(u)显示四个字节(b),0x4000,0x4001,0x4002,0x4003。
3.连续print内存空间的值: print 开始表达式@连续打印内存的长度 ,
eg: p *(0x14ac248)@16
4.GDB中执行shell命令: shell <cmd>
5.多线程调试时,锁住当前线程运行: setscheduler-locking off|on|step,
off 不锁定任何线程,也就是所有线程都执行,这是默认值。 on 只有当前被调试程序会执行。 step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
6.GDB反向调试流程:
record >> reverse-next / reverse-step >> recordstop
具体可参看:《Reverse Debugging with GDB》 --- http://sourceware.org/gdb/wiki/ReverseDebug
7.远程设备断开后,gdb client不能退出: Ctrl +C 退回到命令输入状态后, 输入 kill,然后再 q 即可
8. solib-absolute-prefix 和solib-search-path的区别:solib-absolute-prefix设置的是被搜索文件路径的前缀,solib-search-path设置的是被搜索文件的路径;solib-search-path可以有多个路径,中间按用:隔开,solib-absolute-prefix的值只能有一个。
9. 执行函数: call <func>
10.退出当前循环体: until
11. 停止执行当前函数,并返回value给调用者: return
12. 打印堆栈帧: info frame
13.如何查看lib是否带debug info: readelf –S xxx.so |grep debug