gdb调试常用命令

简介: gdb调试常用命令

gdb调试常用命令

gdb简介

GDB(GNU Debugger)是GCC的调试工具。

要使用GDB,需要在源代码编译的时候添加 -g 参数。

用到四个基础文件 file1.c、file2.c 、head.h、hello.c,一个 makefile 文件

其中文件file1.c 如下:

#include"head.h"

int sum(int a, int b)
{
   
        printf("here is file1\n");
        return a+b;
}

其中文件file2.c 如下:

#include"head.h"

int mul(int a,int b)
{
   
        printf("here is file2\n");
        return a*b;
}

其中文件head.h如下:

#include<stdio.h>
int sum(int a,int b);
int mul(int a,int b);

其中调用文件 hello.c 如下:

#include"head.h"

int main()
{
   
        printf("here is hello.c\n");
        int a=sum(1,2);
        int b=mul(2,2);
        printf("1+2=%d\n",a);
        printf("2*2=%d\n",b);
        return 0;
}

makefile文件:

src=$(wildcard ./*.c)
obj=$(patsubst %.c,%.o,$(src))
target=hello
CC=gcc
CPPFLAGS=-I ./
# 最终目标
$(target):$(obj)
        $(CC) -o $@ $^
#注意这里加了参数 -g
%.o:%.c
        $(CC) -o $@ -g -c $< $(CPPFLAGS)

# 伪目标
.PHONY:clean
clean:
        rm -rf $(target) $(obj)

使用 make 命令生成 hello 可执行文件,注意在编译阶段一定要添加 -g 参数

make
#输出,并生成 hello 可执行文件
gcc -o file2.o -g -c file2.c -I./
gcc -o hello.o -g -c hello.c -I./
gcc -o file1.o -g -c file1.c -I./
gcc -o hello file2.o hello.o file1.o

gdb启动

gdb启动命令

#gdb 可执行文件
gdb hello
#输出
GNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
...
...
Reading symbols from hello...done.
(gdb)

gdb 就启动了,可以在gdb里面输入以下相关调试命令进行调试

1. 显示源代码

命令 作用
show listsize 查看当前 list 命令显示的行数
set listsize count 设置 list 命令显示的行数为count
list 显示当前源程序文件,显示下方默认行数的内容
list - 这里可以理解成减号,显示上方默认行数的内容
list linenum 显示 linenum 行处的上下文内容
list function 显示函数名为function的函数的源程序
list file:linenum 显示file文件下第n行
list file:function 显示file文件的函数名为function的函数的源程序

show listsize

查看当前 list命令 显示行数的大小

(gdb) show listsize
#输出,默认显示 10行
Number of source lines gdb will list by default is 10.

set listsize count

设置一次显示源代码的行数

#设置默认显示 5行
(gdb) set listsize 5
#输出默认显示行数
(gdb) show listsize
#输出,默认显示5行
Number of source lines gdb will list by default is 5.

2. 设置断点

设置断点用 break 命令, 简写为 b

2.1 添加断点

命令 作用
b linenum 在第 linenum 行设置断点
b func 在函数 func 入口处设置断点
b filename:linenum 在源文件filename的linenum行处设置断点
b filename:function 在源文件filename的function函数的入口处设置断点
b test.c:8 if value== 5 条件断点,当变量value的值为5时断电生效

2.2 查看所有断点

命令 作用
info break 简写 i b ,查询所有断点

2.3 断点属性修改

删除断点

命令 作用
delete num 简写 d num ,删除某个断点
delete num1 num2 简写 d num1 num2,删除多个断点
delete n1-n2 简写 d n1-n2 ,删除多个断点
delete 删除所有断点

禁用断点

命令 作用
disable num 简写 dis num ,禁用某个断点
disable num1 num2 简写 dis num1 num2,禁用多个断点
disable n1-n2 简写 dis n1-n2 ,禁用多个断点
disable 禁用所有断点

启用断点

命令 作用
enable num 简写 ena num ,启用某个断点
enable num1 num2 简写 ena num1 num2,启用多个断点
enable n1-n2 简写 ena n1-n2 ,启用多个断点
enable 启用所有断点

3. 调试代码

命令 作用
run 简写 r ,运行程序,有断点也不停
start 运行程序,有断点停止运行
next 简写 n,单步执行
step 简写 s,单步执行,可以进入函数体内
finish 退出函数体
until 简写为u,在循环体内单步执行, 直到退出循环体
continue 简写为c,继续运行程序, 若有断点则跳到下一个断点处

4. 查看变量的值

命令 作用
print count 简写p count,打印变量count
display 变量名 添加一个变量名展示
info display 查看添加了哪些变量名展示
undisplay num(info display时显示的编号) 删除某个变量展示
delete display num 删除某个变量展示
disable display num 禁用某个变量的展示
enable display num 启用某个变量的展示

5. 其他语法

查看变量类型: ptype 变量名

临时设置变量的值:set var 变量名=值

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
开发工具 git C++
【git 实用指南】git下载、拉取 代码
【git 实用指南】git下载、拉取 代码
3584 2
|
资源调度 关系型数据库 MySQL
若依框架部署从零开始2023版(前后端分离)
电脑最近重装了一次系统,目前什么都没有安装,记录一下从零开始部署前后端分离版本的若依框架系统先去官网把若依源码拉下来。
2132 0
|
缓存 Ubuntu Linux
LXC (Linux 虚拟环境)简单介绍
LXC是Linux containers的简称,操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供的虚拟的执行环境。一个虚拟的执行环境被称为一个容器(container)。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。
1784 0
LXC (Linux 虚拟环境)简单介绍
|
Linux 数据安全/隐私保护
使用Linux命令行接入无线网络Wi-Fi的示例。
现在,你已经使用命令行成功地连接到 Wi-Fi 网络了。这两个示例涵盖了用 `nmcli` 和 `wpa_supplicant` 连接无线网络的常见场景,让你能够不依赖图形化界面来完成这个任务。在日常使用中熟练掌握这些基本操作能增强你对 Linux 系统的理解,帮助你更有效地处理各种问题。
1034 12
|
存储 NoSQL Unix
gdb调试常用指令及案例讲解
GDB是一个由GNU开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具。
1046 1
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
消息中间件 存储 Kafka
深入浅出分析kafka客户端程序设计 ----- 消费者篇----万字总结(上)
深入浅出分析kafka客户端程序设计 ----- 消费者篇----万字总结(上)
833 1
|
存储 缓存 Linux
嵌入式Linux中内存管理详解分析
嵌入式Linux中内存管理详解分析
408 0
|
Unix Docker 容器
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon
1619 0
|
NoSQL C++ 开发者
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
【C/C++ 调试 GDB指南 】GDB中的‘info’命令:一次全面的探索
974 0

热门文章

最新文章