gdb 切换到图形页面 Ctrl + x + a
一.基本命令
1.如何进入gdb : gdb 可执行程序名称(前提是编译的时候需要加-g进行编译)
2.gdb中清空屏幕: shell clear
3.设置断点: b(break) + 行号/函数名/文件名:行号/... [断点可以设置多个]
4.查看断点信息: info breakpoints
5.使断点失效: disable + 断点的编号 使断点有效: enable + 断点的编号
6.删除断点: clear + 行号/函数名/文件名:行号/...
delete +断点编号(断点编号之间可以用空格隔开,若没有参数,默认删除所有断点)
7.让程序继续运行: continue
8.查看变量的值: p(print) + 变量名
9.执行下一条语句: n(next)
10.进入函数: s(step)
11.让函数运行: r(run)
12.退出dgb: q(quit)
二.多线程调试
1. info threads: 查看所有运行的线程信息, *表示当前调试的线程
2. thread + 线程号 表示切换线程
3. set scheduler-locking on 开始多线程单独调试,让待调试线程跑,其它线程阻塞。
4. set scheduler-locking off 关闭多线程单独调试,其它线程不阻塞。
三.多进程调试
1. attach + pid 加载进程
2. set follow-fork-mode [parent|child] set detach-on-fork [on|off]
parent on 只调试主进程(gdb默认)
child on 只调试子进程
parent off 同时调试两个进程,gdb跟主进程,子进程block在fork位置
child off 同时调试两个进程,gdb跟子进程,主进程block在fork位置
四.段错误调试
1. bt(backtrace) 查看堆栈信息(一般出现段错误会查看);
bt + n 表示显示栈顶的n个帧信息 ;
bt + -n 表示显示栈底的n个帧信息。
2. frame + 堆栈帧(数字): 切换到几号堆栈帧
3. up 向上一个堆栈 up 后可加数字表示向上跳转到几个堆栈帧
4. down 向下一个堆栈 down 后可加数字表示向下几个堆栈帧
5. info frame 打印帧的信息
6. info args 打印变量的值