调试选项
CMakeLists.txt
添加以下代码,-g
表示gcc编译的时候加上调试信息,Debug
版本表示带调试符号的软件版本
1 | set(CMAKE_CXX_FLAGS "-g") |
启动调试
编译好的程序使用以下指令运行起来
1 | gdb 程序名 |
运行程序
使用run
命令运行程序,也可以使用缩写r
1 | (gdb) run |
代码片段
使用list
命令查看代码片段,也可以使用缩写l
1 | (gdb) list |
运行/继续
使用continue
命令运行或者继续,也可以使用缩写c
1 | (gdb) continue |
执行一行代码
使用next
命令执行一行代码,也可以使用缩写n
,遇到函数调用不会进入函数
1 | (gdb) next |
设置断点
使用break
或者缩写b
命令设置一个断点
1 | (gdb) break 行号 |
删除断点
使用delete
、del
、d
可以删除指定编号的断点
1 | (gdb) delete 断点编号 |
设置断点无效
暂时不想用断点可以用disable
、dis
命令暂时使其无效
1 | (gdb) disable 断点编号 |
设置断点生效
ena
、enable
命令使能断点
1 | (gdb) ena 断点编号 |
单步调试
step
命令遇到函数会进入跟next命令不一样,也可以用缩写s
1 | (gdb) step |
当前堆栈
使用bt
命令可以查看当前执行的堆栈列表,可以查看到用数字编码的堆栈列表
1 | (gdb) bt |
查看当前帧
使用frame
命令可以查看当前执行的堆栈帧所在位置,也可以使用缩写f
1 | (gdb) frame |
回溯切换堆栈帧
通过帧号设置可以回溯(跳转)当前执行的堆栈位置,up
、down
命令可以设置帧号增减
1 | (gdb) frame 帧号 |
打印变量
print
命令用于查看变量的值,也可以用缩写p
1 | (gdb) print 变量名 |
变量类型
ptype
命令用于查看指定变量的类型
1 | (gdb) ptype 变量名 |
查看所有线程
如果想查看当前程序实例有多少个线程,可以使用以下命令
1 | (gdb) info threads |
查看局部变量
如果想查看当前执行位置的所以局部变量,可以使用以下命令
1 | (gdb) info locals |
查看传入参数
如果想查看当前函数所有入参,可以使用以下命令
1 | (gdb) info args |
查看异常信息
如果想查看当前当前程序的异常信息,可以使用以下命令
1 | (gdb) info catch |
不懂就问
使用help
命令可以查看一些命令的用法
1 | (gdb) help |
远程调试
连接gdbserver使用以下格式指令
1 | (gdb) target remote IP地址:端口号 |
图形化界面
调试源代码比较多的时候使用特别是cpp代码
1 | gdb -tui |