您的位置:首页 > 财经 > 金融 > 即时通讯软件_肥城网站制作_爱站网关键词密度查询_今日十大热点新闻头条

即时通讯软件_肥城网站制作_爱站网关键词密度查询_今日十大热点新闻头条

2024/11/18 13:58:29 来源:https://blog.csdn.net/a_13572035650/article/details/142370017  浏览:    关键词:即时通讯软件_肥城网站制作_爱站网关键词密度查询_今日十大热点新闻头条
即时通讯软件_肥城网站制作_爱站网关键词密度查询_今日十大热点新闻头条

文章目录

  • 前言
  • 一、启动与退出gdb
  • 二、设置参数
  • 三、启动程序
  • 四、查看代码
  • 五、设置显示行数
  • 六、设置断点
  • 七、查看与删除断点
  • 八、设置断点状态
  • 九、打印信息
  • 十、单步调试


前言

gdb是GNU Debugger的缩写,是GNU项目开发的自由开源软件调试工具。GDB 是一套字符界面的程序集,可以使用命令 gdb 加载要调试的程序。


一、启动与退出gdb

# -g 将调试信息写入到可执行程序中
gcc -g main.c -o app#启动gdb
gdb app
(gdb) 		# gdb等待输入调试的相关命令#退出gdb
q

二、设置参数

#设置参数
set args 1 2 3 4 5
#展示参数
show args

三、启动程序

#方法一:启动程序, 最终会阻塞在main函数的第一行
start
#方法二:run可以缩写为 r, 如果程序中设置了断点会停在第一个断点的位置, 如果没有设置断点, 程序就执行完了
run

四、查看代码

# 使用 list 和使用 l 都可以
# 从第一行开始显示
(gdb) list # 列值这行号对应的上下文代码, 默认情况下只显示10行内容
(gdb) list 行号# 显示这个函数的上下文内容, 默认显示10(gdb) list 函数名

五、设置显示行数

# 以下两个命令中的 listsize 都可以写成 list
(gdb) set listsize 行数# 查看当前list一次显示的行数
(gdb) show listsize

六、设置断点

1、设置普通断点到当前文件
# 在当前文件的某一行上设置断点
# break == b
(gdb) b 行号
(gdb) b 函数名		# 停止在函数的第一行
2、设置普通断点到某个非当前文件上
# 在非当前文件的某一行上设置断点
(gdb) b 文件名:行号
(gdb) b 文件名:函数名		# 停止在函数的第一行
3、设置条件断点
# 必须要满足某个条件, 程序才会停在这个断点的位置上
# 通常情况下, 在循环中条件断点用的比较多
(gdb) b 行数 if 变量名==某个值

七、查看与删除断点

# 查看设置的断点信息
(gdb) i b   #info break# 删除断点  delete == del == d
# 举例: 
(gdb) d 1          # 删除第1个断点
(gdb) d 2 4 6      # 删除第2,4,6个断点
(gdb) d 1-5        # 举例, 删除第1到第5个断点

八、设置断点状态

1、设置断点无效

# 设置第2,4个断点无效
(gdb) dis 2 4# 设置 第5,6,7,8个 断点无效
(gdb) dis 5-8

2、设置断点生效

# 设置第2,4个断点生效
(gdb) ena 2 4# 设置 第5,6,7,8个 断点生效
(gdb) ena 5-8

九、打印信息

1、打印变量值

# 举例
(gdb) p i       # 10进制
$5 = 3
(gdb) p/x i     # 16进制
$6 = 0x3
(gdb) p/o i     # 8进制
$7 = 03

2、打印变量类型

# 打印变量类型
(gdb) ptype i
type = int
(gdb) ptype array[i]
type = int
(gdb) ptype array
type = int [12]

十、单步调试

1、 step命令可以缩写为s, 命令被执行一次代码被向下执行一行,如果这一行是一个函数调用,那么程序会进入到函数体内部。
2、 finish如果通过 s 单步调试进入到函数内部, 想要跳出这个函数体, 可以执行finish命令。如果想要跳出函数体必须要保证函数体内不能有有效断点,否则无法跳出。
3、next命令和step命令功能是相似的,只是在使用next调试程序的时候不会进入到函数体内部,next可以缩写为 n。
4、 通过 until 命令可以直接跳出某个循环体,这样就能提高调试效率了。如果想直接从循环体中跳出, 必须要满足以下的条件,否则命令不会生效:
a.要跳出的循环体内部不能有有效的断点。
b.必须要在循环体的开始/结束行执行该命令。


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com