Ubuntu GDB 的基本使用-传参调用

目录

系统环境

前提

带参数执行

其他常用命令


系统环境

Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-100-generic x86_64)

前提

GDB安装 :sudo apt install gdb

基础测试示例 : 之前写的- 学生管理系统 -

带参测试示例 :代码截图如下

 # 因为传入的参数args 为 字符串形式,故需要用 %s 打印

带参数执行

编译命令:gcc -g test.c -o test                # 加个 -g

帮助信息:gdb --help

gdb启动:

    gdb ./可执行文件 

                         

   假如执行的有参数,gdb进入程序后,再执行下面的命令

    (gdb) set args 参数1....                #示例截图如下

其他常用命令

1. 显示代码

(gdb) l                     #默认向后显示的10行
(gdb) l num             #向后显示num行
(gdb) l -                   #向前显示


2. 设置断点(break 简写为b)
(gdb) b 10                      #行号
(gdb) b  function               #函数名

3. 断点-打开、关闭、删除
(gdb) disable + 断点的编号                 #禁用 某个断点
(gdb) enable + 断点的编号                 #使能 某个断点
(gdb) delete + 断点的编号                  #删除 某个断点


4. 查看断点的设置信息(info)
(gdb) info b


5. 运行代码 (run 简写为r)
(gdb) r                #继续运行 直至碰到下一个断点 或者 下一次输入 或 直至结束


6. 查看变量的值(print 简写p)
(gdb) p num                    #打印变量 num 的值
(gdb) info num                #也能查看


7. 恢复程序的运行(continue 简写为c)
(gdb) c

8. 跟进到函数内部(代码执行到函数调用的行时  按下s)
(gdb) s

9. 单步执行 (next 简写为n)
(gdb) n   单步执行之前,必须先执行run


10. 查看帮助信息 (help 简写为h)
(gdb) h 命令

11. 退出调试状态(quit 简写为q)
(gdb) q                #直接输入 quit 也可以,ctrl+c 不行

### 如何在 Ubuntu 系统中使用 GDB 调试程序 #### 准备工作 为了能够在 Ubuntu 中成功使用 GDB 调试 C/C++ 程序,首先需要确保已经安装了必要的软件包。可以通过以下命令来安装 GDB 工具以及编译器 GCC: ```bash sudo apt update && sudo apt install gdb gcc g++ ``` 这一步骤确保系统具备运行和调试所需的基础环境[^1]。 #### 创建测试程序 假设有一个简单的 C 程序 `test.c` 文件如下所示: ```c #include <stdio.h> int main() { int a = 5; int b = 0; printf("Value of a is %d\n", a); b = a * 2; // Breakpoint can be set here. printf("Value of b is %d\n", b); return 0; } ``` 保存该文件后,使用 `-g` 参数对其进行编译以包含调试信息: ```bash gcc -o test -g test.c ``` 此参数会将额外的调试符号嵌入到二进制文件中,从而允许 GDB 查看变量值和其他内部状态。 #### 使用 GDB 基本操作 启动 GDB 并加载目标可执行文件: ```bash gdb ./test ``` 进入交互模式后,可以设置断点 (Breakpoints),查看当前栈帧中的局部变量及其内存地址等内容。例如,在第 7 行处设下断点: ```gdb break 7 ``` 接着输入 `run` 或者缩写形式 `r` 来开始执行直到遇到第一个断点为止: ```gdb run ``` 当程序暂停于指定位置时,利用命令如 `print` (`p`) 打印表达式的值;或者借助 `info locals` 展示所有本地定义的数据项: ```gdb print a info locals ``` 继续单步前进至下一语句则需调用 `next`/`step` 功能键字之一: - **Next**: 只向前移动一条指令而不深入函数体内; - **Step**: 如果碰到子过程调用,则跳转进去逐步解析其逻辑流程。 最后退出整个会话只需简单敲击一次 `quit` 即可结束本次调试环节。 #### 高级特性——远程调试 如果涉及跨平台或多架构应用开发(比如 ARM Cortex-A 处理器),可能还会面临主机端与目标板之间建立网络链接的需求以便实施更复杂的场景分析。此时就需要按照特定文档指引完成相应配置步骤,包括但不限于启用服务器监听端口、确认防火墙规则开放对应范围内的通信权限等等[^2]。 另外值得注意的是现代集成开发环境中也集成了图形界面版本的支持选项,像 Visual Studio Code 就提供了插件扩展机制使得开发者能够更加直观便捷地操控这些传统命令行工具所提供的强大能力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值