gdb调试命令

发布时间 2023-08-21 11:43:42作者: ddup123

命令行传参

使用举例:

# 使用 gdb 调试
1$ gdb app
# 通过gdb给应用程序设置命令行参数
2(gdb) set args 11 22 33 44 55
# 查看设置的命令行参数
3(gdb) show args
Argument list to give program being debugged when it is started is "11 22 33 44 55".

gdb中启动程序

# 两种方式
# 方式1: run/r   
(gdb) run  //会执行到程序结束
# 方式2: start (gdb) start
(gdb) start //执行到main函数第一行

查看代码

(gdb) list //默认查看main函数所在的文件

# 列值这行号对应的上下文代码, 默认情况下只显示10行内容
(gdb) list 行号

# 显示这个函数的上下文内容, 默认显示10行
(gdb) list 函数名

#切换文件

# 切换到指定的文件,并列出这行号对应的上下文代码, 默认情况下只显示10行内容
(gdb) l 文件名:行号

# 切换到指定的文件,并显示这个函数的上下文内容, 默认显示10行
(gdb) l 文件名:函数名

 

#设置显示的行数

(gdb) set listsize 行数

断点操作

# 在当前文件的某一行上设置断点
# break/b
(gdb) b 行号
(gdb) b 函数名 //停止在函数的第一行

# 在非当前文件的某一行上设置断点
(gdb) b 文件名:行号
(gdb) b 文件名:函数名 # 停止在函数的第一行

# 必须要满足某个条件, 程序才会停在这个断点的位置上
(gdb) b 行数 if 变量名==某个值

# 查看设置的断点信息
(gdb) i b #info break

# 删除断点举例:
(gdb) d 1 # 删除第1个断点
(gdb) d 2 4 6 # 删除第2,4,6个断点

# 举例, 删除第1到第5个断点
(gdb) d 1-5

# 设置某一个或者某几个断点无效
(gdb) dis 断点1的编号 [断点2的编号 ...]

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

# 如果变量是一个整形, 默认对应的值是以10进制格式输出,其它格式将fmt设为相应字符
(gdb) p/fmt 变量名