3、如何使用GDB来进行命令行debug

一、与前面的联系

对于前面说到的launch.json文件就是用于debug的配置文件,在前面的vscode中我们可以发现配置好launch.json文件之后进行调试,其主要是如下的界面在这里插入图片描述
如上图所示,这些数据的监控实际上就是调用了底层的GDB命令,其只不过是将其界面化,易于操作罢了

二、GDB的一些认识

1、什么是gdb

”GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。

发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada等。实际场景中,GDB 更常用来调试 C 和 C++程序。

2、gdb作用

GDB的主要功能就是监控程序的执行流程。

只有当源程序文件编译为可执行文件并执行时,并且该文件中必须包含必要的调试信息(比如各行代码所在的行号、包含程序中所有变量名称的列表(又称为符号表)等),GDB才会派上用场。

所以在编译时需要使用 gcc/g++ -g 选项编译源文件,才可生成满足 GDB 要求的可执行文件

3、gdb可实现的功能

1)程序启动时,可以按照我们自定义的要求运行程序,例如设置参数和环境变量
2)可使被调试程序在指定代码处暂停运行,并查看当前程序的运行状态(例如当前变量的值,函数的执行结果等),即支持断点调试
3)程序执行过程中,可以改变某个变量的值,还可以改变代码的执行顺序,从而尝试修改程序中出现的逻辑错误

三、GDB常用的调试命令

在这里插入图片描述

实践例子:
gdb启动时会默认打印一堆免责条款,通过添加 --silent(或者 -q、–quiet)选项,可将这部分信息屏蔽掉。

rocess@ubuntu:~/code/helloworld$ gdb helloworld -q     <-- 启动gdb进行调试
Reading symbols from helloworld...
(gdb) l    <-- 显示带行号的源代码
1       #include <iostream>
2       using namespace std;
3
4       extern int Add(int x,int y);
5       int main()
6       {
7           cout << "Hello, world!" << endl;
8
9           int a=2;
10          int b=3;
(gdb) <-- 默认情况下,l 选项只显示 10 行源代码,如果查看后续代码,按 Enter 回车键即可
11          int z;
12          z =Add(a,b);
13          cout << z << endl;
14          return 0;
15      }
(gdb) b 12	<-- 在第12行源代码处打断点
Breakpoint 1 at 0x120b: file /home/process/code/helloworld/helloworld.cpp, line 12.
(gdb) r		<-- 运行程序,遇到断点停止
Starting program: /home/process/code/helloworld/helloworld 
Hello, world!

Breakpoint 1, main () at /home/process/code/helloworld/helloworld.cpp:12
12          z =Add(a,b);
(gdb) print z	<-- 查看代码中变量 z 的值
$1 = 0			<-- 当前 n 的值为 1,$1 表示该变量 表示该变量所在存储区的名称
(gdb) b 13		<-- 在第13行源代码处打断点
Breakpoint 2 at 0x55555555521d: file /home/process/code/helloworld/helloworld.cpp, line 13.
(gdb) n			<-- 单步执行程序

Breakpoint 2, main () at /home/process/code/helloworld/helloworld.cpp:13
13          cout << z << endl;
(gdb) print z	<-- 查看代码中变量 z 的值
$2 = 5
(gdb) c			<-- 继续执行程序
Continuing.
5
[Inferior 1 (process 16727) exited normally]
(gdb) q			<-- 退出调试

具体更多的命令使用详情参考:https://blog.csdn.net/qq_28351609/article/details/114855630

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux命令debug是指通过使用特定的命令工具来对系统进行调试和故障排除。在提供的引用中,pcie_debug是一个用于读取/写入PCIe BARx内存空间的命令工具。通过在Linux下使用VS Code进行验证,可以使用pcie_debug来对PCIe设备进行调试和测试。 此外,还提到了一些其他与Linux命令调试相关的操作,如修改grub配置文件以打开详细的系统日志输出,制作CentOS的grub2 gdisk硬盘镜像,使能SSH远程登录,以及修改系统语言设置。 总之,Linux命令debug是通过使用特定的命令工具和操作来诊断和解决系统问题的过程。它可以帮助开发人员和系统管理员定位并修复故障,并提供更详细的系统日志和调试信息以便进行故障排除。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [pcie_debug:用于读写 PCIe BARx 内存空间的命令工具](https://download.csdn.net/download/sunflow/85487158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Linux debug 常用命令](https://blog.csdn.net/xiaopangzi313/article/details/124880992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python Linux如何debug](https://blog.csdn.net/weixin_53064820/article/details/127264828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值