(gdb) list 1
从第一行开始列出源码 一次列出10行,如果要从11行继续列出直接输入list或l(命令简写)
(gdb) l* <func_name>
搜索
func_name所在位置。
(gdb)start
开始运行程序
(gdb) next (简写n)
单条执行指令 直接回车重复执行上一条命令 n
(gdb)step (简写s)
执行下一行语句,如果有函数调用则进入函数中,类似于C#中F10
(gdb)backtrace (简写bt)
查看函数调用的栈帧:
(gdb) bt
#0 add_range (low=1, high=10) at text.c:6
#1 0x080483c1 in main () at main.c:14
#0 add_range (low=1, high=10) at text.c:6
#1 0x080483c1 in main () at main.c:14
- 当前的add_range函数被main函数调用,main传进来的参数是low=1, high=10
- main函数的栈帧编号为1 , add_range的栈帧编号为0
(gdb)info locals (简写i)
查看函数局部变量的值
(gdb) i locals
i = 0
sum = 0
(gdb)set var sum=0
i = 0
sum = 0
(gdb)set var sum=0
修改参数的值
(gdb)frame (简写f)
选择栈帧
(gdb)print (简写p)
打印表达式的值,通过表达式可以修改变量值或调用函数
(gdb)display x
每次停下来显示参数x的当前值,undisplay取消显示
(gdb)break 5 (简写b)
(gdb)break 5 (简写b)
在第5行设置断点
(gdb)continue (简写c)
连续运行,到达断点自动停下来
(gdb)i breakpoints
查看已设置的断点 Num为断点编号
Num Type Disp Enb Address What
2 breakpoint keep y 0x080483c3 in main at main.c:9
breakpoint already hit 1 time
3 breakpoint keep y 0x08048411 in main at main.c:12
2 breakpoint keep y 0x080483c3 in main at main.c:9
breakpoint already hit 1 time
3 breakpoint keep y 0x08048411 in main at main.c:12
(gdb)delete breakpoints 2
通过编号删除指定断点
(gdb)disable breakpoints 2
通过编号禁用断点 enable 启用
(gdb) break 9 if sum != 0
断点有效条件
(gdb)run (简写r)
从头开始连续运行
断点有效条件
(gdb)run (简写r)
从头开始连续运行
(gdb)x/7b str
打印存储器中的内容。7b是打印格式,7表示打印7组,b表示每个字节一组
(gdb)watch s
设置观察点,观察s的值变化;i watchpoints查看设置的观察点
指定地址时,要在地址前加上*, e.g. watch *0x88881234
(gdb)file *.o
添加调试文件
(gdb)set solib-search-path <.so path>
添加动态库引用路径