目录
GDB调试器
1,生成调试信息
使用编译器的 -g 参数可以生成调试信息。
g++ -g hello.cpp -o hello
2,启动gdb
-
启动gdb:gdb program
program为可执行文件,一般在当前目录下。
-
设置运行参数
set args : 可指定运行时参数。
show args: 命令可以查看设置好的运行参数。 -
启动程序
run : 程序开始执行,如果有断点,停在断点处
start: 程序向下执行一行。
示例:
2,显示源代码
用 list 命令来打印程序源代码。默认打印10行
list :显示当前行后面的程序。
list - :显示当前行前面的源程序。
set listsize count :设置一次显示源代码的行数。
show listsize:查看当前 listsize 的设置。

3,断点操作
当用gdb调试程序时,程序卡在某个断点处,但是我们想要继续运行程序时,需要在gdb状态下输入一些命令。
continue 命令 简称 c
step 单步执行,遇到函数会进如函数内部
next 单步执行,遇到函数会跳过
finish 命令,退出进入的函数
3.1 简单断点:
break 设置断点,简写为 b
b 10 : 设置断点,在源程序第10行。
b func: 设置断点,在func函数入口处。
3.2 多文件设置断点:
c++中可以使用 class::function(type , type) 格式来指定函数名
如果有命名空间,可以使用 namespace::class::function
break filename:linenum 在源文件filename的linenum行处停住。
break filename:function 在源文件filename的function函数的入口停住。
break class::function 或 function(type , type) 在
break namespace::class::function
3.3 查询所有断点:
- info b
- info break
- i break
- i b
3.4 条件断点:
一般来说,为断点设置一个条件,我们使用if关键词,后面跟其断电条件
设置一个条件断点:
b test.c:8 if Value == 5
3.5 维护断点:
delete [range...]:删除指定的断点,其简写命令为d。
clear filename:num: 删除源文件 filename 的第10行的断点。
disable [range...]:使指定断点无效。
enable [range...]使无效断点生效。
4,查看堆栈信息
当程序崩溃后,GDB 会自动暂停并给出类似 "Program received signal SIGSEGV, Segmentation fault." 这样的错误提示,此时在 GDB 命令行输入 bt 或 backtrace,即可查看当前的堆栈回溯信息。