《Linux从练气到飞升》No.09 Linux调试器-gdb使用

简介: 《Linux从练气到飞升》No.09 Linux调试器-gdb使用

前言

当我们在vscode等IDE上编写代码出错时,通常会进行调试,有些人会通过打印数据来找bug,有些人则会使用调试工具,然而当我们在Linux系统中编写代码时却无法这么方便的使用图形化界面调试工具,但还是有调试工具的——gdb,今天我们就来讲述gdb的使用~

背景

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项

如下:

测试代码:

#include <stdio.h>    
int add(int a,int b)   
{                                   
    return a+b;   
}                     
int main() {          
    int i=0;                                   
    int a=1,b=1;                               
    for(i;i<10;++i)                            
    {                                          
        printf("hello linux\n");               
    }                                          
    int c=add(a,b);                            
    printf("%d",c);                            
    return 0;                                  
}           

配置makefile文件

gtest-debug:gtest.c
  gcc -o gtest-debug gtest.c -g
.PHONY:clean
clean:
  rm -f gtest-debug

gdb的使用

调试命令:

gdb gtest-debug

gtest-debug调试过程中常用的命令:

  • ctrl + d 或 quit :退出
  • list/l行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print ( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • set var:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序
  • run(或r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出gdb

实际应用

看过上面的命令后,我们通过实际的例子来掌握命令的使用。

示例1

  • gdb gtest-debug:进入调试

示例2

  • list/l 行号:显示gtest源代码,接着上次的位置往下列,每次列10行。
  • 连续回车会执行上次输入的命令

示例3

  • list/l 函数名:列出某个函数的源代码。

示例4

  • r或run:运行程序。

示例5

  • break(b) 行号:在某一行设置断点
  • run(或r):从开始连续而非单步执行程序
  • n 或 next:单条执行。

示例6

  • print ( p ):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • continue(或c):从当前位置开始连续而非单步执行程序
  • s或step:进入函数调用

示例7

  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • info(或i) breakpoints:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪

示例8

  • until X行号:跳至X行

示例9

ctrl + d 或 quit :退出

后记

通过上面对于gdb的例子应该可以让你很容易明白gdb的使用,但是实际学习中,调试并不常用,所以只需要记得个大概就行。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
3天前
|
NoSQL Java Unix
Linux:调试器 - gdb
Linux:调试器 - gdb
11 1
|
4天前
|
NoSQL Linux 编译器
【Linux】开始使用gdb吧!
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
49 17
【Linux】开始使用gdb吧!
|
6天前
|
NoSQL Linux C语言
【Linux】Linux调试器-gdb使用
【Linux】Linux调试器-gdb使用
7 0
|
20天前
|
NoSQL IDE Linux
Linux的学习之路:8、Linux调试器-gdb使用
Linux的学习之路:8、Linux调试器-gdb使用
21 0
|
1天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
|
1天前
|
监控 Linux 数据处理
|
1天前
|
编解码 Ubuntu Linux
|
1天前
|
JSON Linux 数据格式
Linux命令发送http
请注意,`curl`命令非常灵活,可以根据您的需求进行多种配置和自定义。您可以查看 `curl`命令的文档以获取更多详细信息。
5 0
|
3天前
|
安全 Linux 测试技术
|
3天前
|
安全 Linux Windows
Linux中Shutdown命令使用介绍
Linux中Shutdown命令使用介绍
10 2