Linux(三) GDB 的使用

本文详细介绍GDB工具的安装与使用,包括如何通过GDB进行代码调试,设置断点,单步执行,查看变量等关键操作。同时提供了常用命令的快捷方式,帮助开发者更高效地进行调试。

GDB是什么

Gdb 是Linux 调试代码的一个工具。
安装:

apt install gdb -y

第一次使用:

//首先编译时候要编译出debug需要的信息到可执行文件中。
# g++ -g hello.cpp //-g 是生产debug 信息
//使用gdb运行可执行文件
# gdb a.out
//显示文件信息 l
(gdb) l 
//下面是显示的文件信息:
1	#include <iostream>
2	
3	int main()
4	{
5		std::cout<<"Hello world"<<std::endl;
6		return 0;
7	}
//添加断点:
(gdb) break 5
Breakpoint 1 at 0x106e8: file hello.cpp, line 5.
//开始运行:
(gdb) run
Starting program: /home/pi/code/test-cpp-helloworld/a.out 

Breakpoint 1, main () at hello.cpp:5
5		std::cout<<"Hello world"<<std::endl;
//下一步
(gdb) next
Hello world
6		return 0;
//继续下一步
(gdb) next
7	}
//好了到此结束吧 按q退出。

更新一下=====================================

第n次使用

虽然已经用了还算挺久,但是还没有可以得心应手的程度记录一下使用的命令吧。

上次使用的命令

  l  &&  run  && break  && next

发现都是用的完整的单词,其实可以使用缩写如:

l  &&  r  &&  b  &&  n  && bt  && fr  && c  && p

我就把最常用的几个打了出来,用&&分割请不用在意这个分隔符。

l 对应 list

显示源码, 按空格或者继续输入l就一直往下显示,但是有时候想看前面的代码就需要输入l-

r 对应run

从头运行,第一次必须使用r来运行程序,如果程序需要参数,也是在这里加的,而不是gdb application时候加。如r config.jsonr重新运行程序后我们设置的断点已经有效。

b 对应 break

设置断点,有几种方式,直接按b就是在当前位置加断点,b file_name.cpp:10文件加:就是在指定文件的n行加断点,还有一个就是b main程序入口加断点。

n 对应 next

是单步运行

bt 对应 backtrace

就是堆栈的意思

fr 对应 frame

我看到还可以按f不过我没试过,我每次都是fr n,切换对应层的堆栈。

c 对应 continue

就是继续意思

p 我猜是对应 print

输出的意思。一般p后面加变量或者方法。

===============更新结束

过程中参考了一个博客:[优快云-使用gdb调试程序完全教程1](https://blog.youkuaiyun.com/gatieme/article/details/51671430)


  1. [优快云 使用gdb调试程序完全教程]https://blog.youkuaiyun.com/gatieme/article/details/51671430 ↩︎

Linux环境下使用GDB(GNU Debugger)调试C语言程序是开发过程中非常重要的技能。以下是一个详细的教程,涵盖如何安装、启动和使用GDB进行调试。 ### 安装GDB 在大多数Linux发行版中,GDB已经预装。如果没有,可以通过包管理器安装。例如,在基于Debian的系统上,可以使用以下命令安装: ```bash sudo apt-get install gdb ``` 对于基于Red Hat的系统,可以使用: ```bash sudo yum install gdb ``` 如果你使用的是MinGW(Minimalist GNU for Windows),GDB通常也包含在内,可以直接使用[^2]。 ### 编译带有调试信息的程序 在使用GDB调试之前,确保你的程序在编译时包含了调试信息。使用`-g`选项来保留调试信息: ```bash gcc -g your_program.c -o your_program ``` 这样做的原因是,默认情况下,编译器会生成发布版本(Release),删除所有调试信息以减小可执行文件的体积。而调试版本(Debug)则保留这些信息,便于调试[^3]。 ### 启动GDB 启动GDB并加载你的程序: ```bash gdb ./your_program ``` 这将进入GDB的交互式命令行界面。 ### 常用GDB命令 1. **运行程序**: ```bash run [arguments] ``` 运行程序,并传递参数(如果有的话)。 2. **设置断点**: ```bash break function_name ``` 或者在特定行号设置断点: ```bash break line_number ``` 3. **查看断点**: ```bash info breakpoints ``` 4. **继续执行**: ```bash continue ``` 继续执行程序直到下一个断点。 5. **单步执行**: ```bash step ``` 单步执行,进入函数内部。 6. **查看变量值**: ```bash print variable_name ``` 7. **退出GDB**: ```bash quit ``` ### 示例:调试一个简单的C程序 假设我们有一个简单的C程序 `example.c`: ```c #include <stdio.h> int main() { int a = 5; int b = 10; int c = a + b; printf("The sum is %d\n", c); return 0; } ``` 编译并运行GDB: ```bash gcc -g example.c -o example gdb ./example ``` 在GDB中设置断点并运行: ```bash break main run ``` 使用 `step` 命令逐行执行代码,并使用 `print` 查看变量值: ```bash step print a step print b step print c continue ``` 通过这些步骤,你可以逐步调试你的C语言程序,检查变量状态,并理解程序的执行流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值