GDB笔记
分享一下我使用gdb时经常使用的命令,希望能给到您帮助~
编译生成执行文件:
g++ main.cpp -o main -g
编译时要加上
-g选项表示debug模式
使用GDB调式:
gdb main
-
运行:
run|r: 运行程序,当遇到断点的时候,程序会在断点处停止运行,等待用户输入下一步的命令。用法:一般是打完断点后,执行
run,或简写rstart:运行,从第一条语句开始continue|c:继续执行,直到下一个断点处(或运行结束)。step|s:执行下一句,如果下一执行语句为函数,进入函数next|n|换行:执行下一句,不进入函数finish:从内部函数执行完并返回外部函数。finish和step操作是相对的 -
打断点
break 行号|b 行号:对当前正在执行的文件的指定行号位置设置断点。break 文件名:行号|b 文件名:行号:对指定文件的指定行号位置设置断点。break 函数名|b 函数名:对当前正在执行的文件的指定函数位置设置断点。break 文件名:函数名|b 文件名:函数名:对指定文件的指定函数位置设置断点tb 行号:一次性断点,temporary breakpointtb 函数名:同上info breakpoint|i b:查看已设置的断点enable 断点号:使断点生效disable 断点号:使断点失效delete 断点号:删除断点还可以搭配 if 语句
b 行号 if 条件表达式:if条件满足时,停在该行下面展示具体的条件表达式,不过不同的是给函数打断点:
b 函数名 if name == 0:if 条件满足时,才停在函数名这行上保存断点信息:
如果花了很多时间打了一堆有用的断点信息,避免退出gdb后重复打断点,可以使用下面的命令,来保存断点信息,下次进入gdb直接导入上次设置的断点记录即可:save breakpointes 文件名.gdb:保存断点信息。
进入gdb后,source 文件名.gdb,加载断点信息。 -
查看值
display变量:显示变量,会在窗口一直显示变量取消用
undisplay display编号用
i display可以查看display编号watch变量:监视修改的变量,可以搭配条件 watch 变量 if条件表达式rwatch变量:读取该变量的时候,终止一下。print 变量|p 变量:打印变量,一次性显示。 -
layout src:使用窗口查看源代码 -
tui enable:和上面一样的功能 (建议只记这个,这也是我经常用到的命令)(建议只记这个,这也是我经常用到的命令)(建议只记这个,这也是我经常用到的命令) -
layout asm:使用窗口查看汇编源码
其他技巧
一、 查看智能指针指向的数组所有元素:
-
普通指针的情况:
int* p = new int[10];在gdb中,可以通过
display *p@10,查看指针p指向的数组首地址连续的10个存储单元的值。 -
那么智能指针如何处理呢?
其实智能指针中存在get()成员函数,它可以返回原始指针,所以可以利用这个函数,假设p为智能指针变量,在gdb中可以如下进行打印:
display *((p.get())@10
二、gdb 查看二维数组
比如,要查看arr[3][4]中的全部元素:
display *arr[0]@4 //@4表示4个列元素
display *arr[1]@4
display *arr[2]@4
本文分享了GDB调试器的常用命令,包括编译设置、断点管理、运行控制、值查看、源码查看等,并介绍了智能指针和二维数组的特殊处理方法。掌握这些技巧,提升你的代码调试效率。

1641

被折叠的 条评论
为什么被折叠?



