GDB (GNU Debugger) 是一个强大的调试工具,用于在各种编程语言中检查和调试代码。在GDB训练中,理解并熟练掌握其基本命令对于优化软件开发过程至关重要。以下是GDB的一些关键知识点: 1. **程序的载入**:使用`file`命令载入待调试的可执行文件。例如,`gdb my_program`将加载名为`my_program`的程序。 2. **运行**:使用`run`命令启动程序执行。如果需要传入命令行参数,可以这样执行:`run arg1 arg2`。 3. **断点(breakpoint)**:断点允许你在特定行暂停程序执行,以便检查程序状态。设置断点的命令是`break`,如`break 10`将在第10行设置断点。 4. **观察点(watchpoint)**: - **watchpoint的作用**:当被观察的变量发生变化时,程序会暂停。 - **设置watchpoint**: - `watch <variable>`:当变量被读取或写入时暂停。 - `watch <variable> == <value>`:当变量的值等于`value`时暂停。 - `awatch <variable>`:仅在变量被写入时暂停。 - `rwatch <variable>`:仅在变量被读取时暂停。 - `watch <variable> if <expression>`:当`expression`条件满足且变量被访问时暂停。 **注意**:`awatch <variable> == <value>`和`rwatch <variable> == <value>`不会像`watch <variable> == <value>`那样暂停,因为它们不支持条件比较。 5. **查看和管理断点/观察点**: - `info breakpoints`:列出所有断点信息。 - `info watchpoints`:列出所有观察点信息。 - `delete watchpoint <watchpoint-num>`:删除指定的观察点。 - `delete breakpoint <breakpoint-num>`:删除指定的断点。不区分`watchpoint`和`breakpoint`,两者都会删除。 - `delete`:删除所有断点和观察点。 6. **启用/禁用断点/观察点**: - `disable watchpoint <watchpoint-num>`:禁用指定观察点。 - `disable breakpoint <breakpoint-num>`:禁用指定断点。 - `disable breakpoint`:禁用所有断点。 - `enable watchpoint <watchpoint-num>`:启用指定观察点。 - `enable breakpoint <breakpoint-num>`:启用指定断点。 - `enable breakpoints`:启用所有断点。 7. **运行时控制**: - **打印变量值**: - `print /fmt <variable>`:以指定的格式显示变量值,`fmt`可以是`x`(十六进制)、`d`(十进制)、`u`、`o`、`t`、`a`、`f`、`c`或`s`。 - `print <primitive-variable or structured-variable>`:打印原始或结构化变量。 - `print <function>( arg1, arg2, …, argn )`:调用函数并打印返回值。 - `print <expression>`:打印表达式的结果,如`a==b`。 - `print <array-name>`:打印数组。 - `print *<pointer-name>@<length>`:打印指针指向的内存区域,如`*a@3`打印前3个元素。 8. **自动显示(display)**: - `display [/fmt] variable`:设置自动显示变量`variable`的值,每次程序暂停时更新。 - `undisplay <display-num>`或`delete display <display-num>`:删除指定编号的自动显示。 - `undisplay`或`delete display`:删除所有自动显示。 - `enable display <display-num>`:启用指定编号的自动显示。 - `disable display <display-num>`:禁用指定编号的自动显示。 通过熟练掌握这些GDB命令,开发者可以更有效地定位和修复代码中的错误,提高软件开发效率和质量。不断更新GDB技能,对于深入理解和调试复杂的程序至关重要。
- 粉丝: 2
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- java学籍管理系统源码带本地搭建教程数据库 MySQL源码类型 WebForm
- php+mysql学生成绩查询(系统)
- Bazel 的 Go 规则.zip
- Android ListView下拉刷新 Demo.zip
- Python实现基于一维卷积神经网络(1D-CNN)的多元时间序列分类源码+文档说明
- java基于springBoot课程评价系统源码数据库 MySQL源码类型 WebForm
- 5G工业无线路由器说明书
- SunshineLife个人博客是基于django+mysql+layui的小型个人博客网站
- 5G终端拔号脚本(AT), 适用于MT5701
- 基于Python + Django的生鲜超市系统 调用alipay沙盒系统支付