GDB简易教程

调试选项

CMakeLists.txt添加以下代码,-g表示gcc编译的时候加上调试信息,Debug版本表示带调试符号的软件版本

 set(CMAKE_CXX_FLAGS "-g")
 set(CMAKE_BUILD_TYPE Debug)

启动调试

编译好的程序使用以下指令运行起来

 gdb 程序名

运行程序

使用run命令运行程序,也可以使用缩写r

 (gdb) run
 (gdb) r

代码片段

使用list命令查看代码片段,也可以使用缩写l

 (gdb) list
 (gdb) l

运行/继续

使用continue命令运行或者继续,也可以使用缩写c

 (gdb) continue
 (gdb) c

执行一行代码

使用next命令执行一行代码,也可以使用缩写n,遇到函数调用不会进入函数

 (gdb) next
 (gdb) n

设置断点

使用break或者缩写b命令设置一个断点

 (gdb) break 行号
 (gdb) break 断点编号 if 条件判断
 (gdb) b 行号
 (gdb) b 断点编号 if 条件判断
 (gdb) b 文件名:行号
 (gdb) b 函数名

删除断点

使用deletedeld可以删除指定编号的断点

 (gdb) delete 断点编号
 (gdb) del 断点编号
 (gdb) d 断点编号

设置断点无效

暂时不想用断点可以用disabledis命令暂时使其无效

(gdb) disable 断点编号
(gdb) dis 断点编号

设置断点生效

enaenable命令使能断点

(gdb) ena 断点编号
(gdb) enable 断点编号

单步调试

step命令遇到函数会进入跟next命令不一样,也可以用缩写s

(gdb) step
(gdb) s

当前堆栈

使用bt命令可以查看当前执行的堆栈列表,可以查看到用数字编码的堆栈列表

(gdb) bt

查看当前帧

使用frame命令可以查看当前执行的堆栈帧所在位置,也可以使用缩写f

(gdb) frame
(gdb) f

回溯切换堆栈帧

通过帧号设置可以回溯(跳转)当前执行的堆栈位置,updown命令可以设置帧号增减

(gdb) frame 帧号
(gdb) up 
(gdb) down

打印变量

print命令用于查看变量的值,也可以用缩写p

(gdb) print 变量名
(gdb) p 变量名

变量类型

ptype命令用于查看指定变量的类型

(gdb) ptype 变量名

查看所有线程

如果想查看当前程序实例有多少个线程,可以使用以下命令

(gdb) info threads

查看局部变量

如果想查看当前执行位置的所以局部变量,可以使用以下命令

(gdb) info locals

查看传入参数

如果想查看当前函数所有入参,可以使用以下命令

(gdb) info args

查看异常信息

如果想查看当前当前程序的异常信息,可以使用以下命令

(gdb) info catch

不懂就问

使用help命令可以查看一些命令的用法

(gdb) help

远程调试

连接gdbserver使用以下格式指令

(gdb) target remote IP地址:端口号

图形化界面

调试源代码比较多的时候使用特别是cpp代码

gdb -tui
阅读剩余
THE END