gdb调试工具的使用

Linux下gdb调试工具的使用,linux下如何使用gdb调试 大多数程序员所使用的IDE(集成开发环境)都是自带调试功能的,调试功能有什么用呢?大家编译程序时发现的问题是语法或链接问题,能编译通过只能说明我们的程序在语法和链接时未产生错误,但不能说明我们程序就是完全正确的,因为程序的业务逻辑问题是在执行时才会发现的,所以我们会发现有很多初学编程的朋友就总会说明明我程序编译通过啦,为什么执行不出来结果或在执行时发生了错误呢,这就是为什么要有调试这一环节,调试的目的就在于发现程序中的业务逻辑问题,一般使用IDE的可以直接使用自带的调试工具进行程序运行调试,那如果我... 阅读详情

1.gdb介绍

GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。
于是UNⅨ下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下的图形软件基本上是各自为营,互相不能调用,很不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较,所谓“寸有所长,尺有所短”,图形化工具还有时不如命令行的地方。

2.gdb的常用命令

  • help(h)———按模块列出命令类
  • help class——查看某一类型的具体命令
  • list(l)———查看代码,可跟行号和函数名
  • quit(q)———退出gdb
  • run(r)———-全速运行程序
  • start———–单步执行,运行程序,停在第一行执行语句
  • next(n)———逐过程执行
  • step(s)———逐语句执行,遇到函数,跳到函数内执行
  • backtrace(bt)–查看函数的调用的栈帧和层级关系
  • info(i)———查看GDB内部局部变量的数值,info breakpoints切换函数的栈帧。
  • finish———-结束当前函数,返回到函数调用点
  • set————-设置变量的值 set var n = 100
  • run argv[1] argv[2]–调试时命令行传参
  • print(p)——–打印变量和地址
  • break(b)——–设置断点,可根据行号和函数名
  • delete(d)——-删除断点d breakpoints NUM
  • display———设置观察变量
  • undisplay——-取消观察变量
  • continue(c)—–继续全速运行剩下的代码
  • enable breakpoints ——-启用断点
  • disable breakpoints——-禁用断点
  • x —————–查看内存 x /20xw 显示20个单元,16进制,4字节每单元
  • watch————被设置观察点的变量发生修改时,打印显示

  • i watch———-显示观察点

  • core文件———ulimit -c 1024 开启core文件,调试时gdb a.out core

3.gdb工具的使用

要想使用gdb工具进行调试编译好的程序,需要gcc或者g++在编译程序的时候使用-g选项。
下面以一个循环链表程序用来调试。

  • help
(gdb) h
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of commands in that class.
Type "help all" for the list of all commands.
Type "help" followed by command name for full 
documentation.
Type "apropos word" to search for commands related to "word".
Command name abbreviations are allowed if unambiguous.
(gdb) 
  • list [可以跟函数名也可以跟行号]

    (gdb) l
    6   
    7   typedef struct _Student
    8   {
    9       CircleListNode circlenode;
    10      int age;
    11  }Student;
    12  
    13  int main()
    14  {
    15      CircleList *list = CircleList_Create();
    (gdb)
  • break

(gdb) l
6   
7   typedef struct _Student
8   {
9       CircleListNode circlenode;
10      int age;
11  }Student;
12  
13  int main()
14  {
15      CircleList *list = CircleList_Create();
(gdb) b 15
Breakpoint 1 at 0x804884d: file test.c, line 15.
  • start
(gdb) start
Temporary breakpoint 2 at 0x804884d: file test.c, line 15.
Starting program: /home/cat/struct_data/a.out 

Breakpoint 1, main () at test.c:15
15      CircleList *list = CircleList_Create();
(gdb) 
  • step
(gdb) s
CircleList_Create () at circlelist.c:16
16      TCircleList *ret = (TCircleList *)malloc(sizeof(TCircleList));
(gdb) l 16
11      int length;
12  }TCircleList;
13  
14  CircleList* CircleList_Create()
15  {
16      TCircleList *ret = (TCircleList *)malloc(sizeof(TCircleList));
17      
18      if (ret == NULL)
19      {
20          return NULL;
(gdb) 
  • next
(gdb) n
18      if (ret == NULL)
(gdb) n
23      ret->header.next = NULL;
(gdb) 
24      ret->slider = NULL;
(gdb) 
25      ret->length = 0;
(gdb) 
27      return ret;
(gdb) 
28  }
(gdb) 
main () at test.c:19
19      int i = 0;
(gdb) l
14  {
15      CircleList *list = CircleList_Create();
16  
17      Student t1, t2, t3, t4;
18  
19      int i = 0;
20  
21      t1.age = 21;
22      t2.age = 22;
23      t3.age = 23;
(gdb) 

列举几个试试,其他的自己练习吧。

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧) 本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。 阅读详情

相关推荐

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 702

掌握GDB调试工具,轻松排除bug!

gdb是GNU debugger的缩写,是编程调试工具。GDB官网:GDB适用的编程语言: Ada / C / C++ / objective-c / Pascal 等。GDB的工作方式: 本地调试和远程调试。目前release的最新版本为8.0,GDB可以运行在Linux 和Windows 操作系统上。1.1安装与启动。

嵌入式Linux内核的博客 4857

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1001

GDB调试工具

3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序(按着自己的想法运行)。GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。2、可让被调试的程序在你所指定的调置的断点处停住。edit [file:]function查看停止的信息。step如果有函数,进入函数,查看函数里面的信息。print expr 打印输出。next一步一步运行。GDB调试正在运行的进程。

qq_43341187的博客 4316

用LTspice仿真Buck电路输出电容:从参数计算到波形优化的全流程演示

本文详细介绍了使用LTspice仿真Buck电路输出电容的全流程,从理论计算到波形优化。通过解析关键参数如纹波电压、瞬态响应和ESR,结合工程计算方法和LTspice仿真技巧,帮助工程师优化Buck电路设计,解决输出纹波过大和瞬态响应不佳的问题。

night的博客 852

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南

在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。

weixin_29192211的博客 305

GDB小记

今天尝试了下用gdb来调试(输出大法好 ) 要注意,对于一个gcc或者是g++直接用 gcc/g++ -o 编译出来的执行程序,是无法直接使用gdb调试的,只有加入-g指令,才会进行包含调试信息的编译。 例: gcc main.c -o main -g 然后就能使用gdb来进行调试了: gdb main 或 gdb main --slient //去掉开始的提示信息 然后下面介绍一些简单常用的调试指令: (gdb) break xxx (gdb) b xxx 在源代码指定的某一行设置断点,其中 xxx

weixin_45146520的博客 510

kettle信息发送钉钉

由于其他的作业比较多,想要在job中加入一个转化发送消息到钉钉,其他的配置说明直接获取系统的信息。这样也避免直接修改其他的转换和大量的工作量。 步骤: 1、新建一个转换 拉取获取系统信息、获取变量、JavaScript代码、获取access_token组件。 2、获取系统信息设置 拿到需要的信息,比如作业的读写更新删除行数,job的日志内容 这个日志内容同在作业执行页面下输出的日志,所以可以在执行作业时选择是详细日志、基本日志还是错误日志。 3、获取变量 获取变量主要是想要去拿到job的名称,文件名。按

Deng_7788的博客 1449

linux技巧--调试工具GDB

在编译程序生成可执行文件之后,就进入了程序的调试环节。在程序中可能会有很多错 误需要进行调试。Linux 系统中包含了 GNU 调试程序 GDB(GNU DeBugger),它是一个用 来调试 C 和 C++ 程序的调试器。GDB 的高级特性会使得搜索错误更加高效。可以使程序 开发者在程序运行时观察程序的内部结构和内存的使用情况。使用 GDB 的优点还在于 GDB 支持嵌入式软件的交叉编译开发模式。

甜航一直在的博客 2132

数字IC/FPGA 秋招知识点不全面整理

数字IC/FPGA 秋招知识点不全面整理

w0shishabi的博客 7866

用 ABAP CDS View 把数据稳定抽到 SAP BW/4HANA:从 ODP 架构到增量机制的落地实践

本文探讨了SAP数据仓库中从业务系统抽取数据到SAP BW/4HANA的最佳实践,重点分析了基于ABAP CDS视图的抽取方法。文章指出CDS视图通过注解可实现元数据描述、增量机制的统一管理,替代传统抽取器。详细介绍了ODP架构如何作为抽取基础设施,以及从CDS到BW的完整链路。同时比较了三种增量抽取方式(BW管理时间戳、ODP通用增量、CDC触发器)的适用场景和注意事项,并强调版本兼容性和云环境连接差异对实施的影响。通过实际案例说明合理选择增量策略对数据仓库稳定性的重要性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

gdb调试工具

gdb调试工具

NickDeCodes的博客 1855

【SpringBoot 4.x 第29节】Spring Security 7 入门:先理解认证和授权!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 553

gdb调试详解

一、gdb调试coredump文件 二、gdb调试多线程       【Note】:

青萍之末的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GDB调试命令详解

GDB是什么 调试程序 程序中出现的语法错误可以借助编译器解决;但逻辑错误则只能靠自己解决。实际场景中解决逻辑错误最高效的方法,就是借助调试工具对程序进行调试。 所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。 也就是说,通过调试程序,我们可以监控程序执行的每一个细节,包括变量的值、函数的调用过程、内存中数据、线程的调度等,从而发现隐藏的错误或者低

Hello World 9万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

如何使用GDB调试

文章目录一、GDB的介绍二、GDB的使用三、使用GDB调试实际例子 一、GDB的介绍 GDB(全称:GNU Debugger)是GNU工程为GNU操作系统开发的调试器。它可以用于调试C、C++、Objective-C、Pascal、Ada等语言编写的程序。 二、GDB的使用 GDB的使用条件 程序要用GDB调试,需要添加调试信息。 添加方法: gcc的-g选项为程序添加调试信息。 例如:gcc –g –o helloworld helloworld.c 启动GDB 启动方法: gdb [程序名称

Harriet的博客 6559

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

GDB调试

转载至从 0 开始学习 Linux 系列之「08.15 个 gdb 调试基础命令」 此处仅想保存下来自己记录 gdb 简介 gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都直接在命令行中用 gdb 来调试程序,相比 Windows 上的集成开发环境 IDE 提供的图形界面调试,一开始使用 gdb 调试可能会让你感到生无可恋,但是只要熟悉了 gdb 调试的常用命令,调试出程序会很有成就感,一方面因为这些命令就类似图形界面调试按钮背后的逻辑,另一方面用命令行来调试程序,逼格瞬

小白的成长 1万+

C++调试@认识GDB调试

GDB(GNU Debugger)是Linux及Unix环境中常用的程序调试工具,windows 下也有许多移植版可以用深入理解程序执行:GDB命令行提供了对程序执行流程的底层控制,帮助你更深入地理解程序的运行机制。通过手动控制每一步执行,你能够更细致地观察变量变化、函数调用、内存状态等,这对于复杂问题的排查非常有帮助。轻量级和灵活性:相比IDE,GDB是一个轻量级工具,尤其适合远程服务器或资源受限环境下的调试。

xuchaoxin1375的博客 1368

【C/C++ 调试 GDB指南 】GDB调试工具介绍:从基础到高级

GDB,全称GNU调试器(GNU Debugger),是一个强大的Unix系统下的源代码级调试工具。它可以帮助程序员查看程序在执行过程中的内部状态,从而更好地理解程序的运行机制。GDB主要用于调试C和C++语言编写的程序。它的存在,使得我们能够更深入地了解程序的运行过程,找出并修复程序中的错误。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3524

Linux下gdb调试工具介绍和gdb常用调试方法介绍

1、gdb介绍 2、gdb用法介绍  (1)生成带有调试信息的可运行程序 a>判断可运行程序是否带有调试信息? b>判断可执行文件是否带有调试信息的两种方法: (2)运行调试程序:(gdb)run、start区别 附加知识:启动带参可执行程序 (3)源码查看:(gdb)list(4)运行参数查看show (5)断点设置 设置断点、设置条件断点、查看断点、删除断点、禁用断点、运行某个断点 (6)堆栈  a>堆栈查看命令 b>栈帧(stack frame)介绍  c>函数调用过程中栈区变化 d>栈增长方向

hanxiaoyong_的博客 8071

【Linux】调试工具GDB的使用及案例讲解

GDB是Linux下一款强大的调试工具。GDB可以调试C、C++、Java等语言,对于在Linux下工作的程序员来说,GDB是必不可少的调试工具。本篇我将以c程序,进行调试和讲解当大家对指令比较熟悉时,gdb的使用还是比较简单的,以上是我个人,经常使用的命令,是对标VS下编译的调试功能来介绍的,如果这不能满足你的要求,可以搜一些更高级的用法。

2301_80774875的博客 1861

调试工具_gdb使用教程

我们要知道我们的程序有两种,一种是release 还有一种是 debug 版本的,我们的调试只有咋 debug 版本下才可以调试,我们只需要在编译的时候在后面加 -g 选项就是添加调试信息,也就是debug 版本。

m0_73455775的博客 3386

使用gdb调试Python程序

前言不知各位有木有遇到这样的情况,生产环境下的Python进程突然卡死了,所有其他线程都无法调度,如果我们kill掉重启,通常会丧失掉当前报错的上下文信息,失去这些信息,对后续报错定位不太友好,能不能在不关停Python程序的情况下,看看程序发生了什么问题?首先,你可以尝试一下,此前我提过的py-spy(漫画:如何分析运行中的 Python 程序?),py-spy可以打印...

weixin_30230009的博客 1万+

gdb调试的基本使用

https://www.cnblogs.com/HKUI/p/8955443.html GDB调试 启动程序准备调试 GDB yourpram 或者 先输入GDB 然后输入 file yourpram 然后使用run或者r命令开始程序的执行,也可以使用 run parameter将参数传递给该程序 参数列表 命令 命令缩写

zdy0_2004的专栏 24万+

关于ubuntu下GDB调试工具的使用

面对ubuntu16.04的用户,其他版本的会有些许差别: 这几天我一直在尝试自己学习GDB调试工具个人认为自己是菜鸟级别的,以下是我的一些学习认识。 要学gdb调试工具 gdb 的安装十分简单,直接可以在命令行上输入gdb,若ubuntu已经安装过会自动打开gdb,若是没有安装, 会自动弹出一行安装的命令:sudo apt-get install gdb ,直接复制粘贴即可完...

卡卡西的博客 8176
上一篇: 递归
下一篇: wait/waitpid函数使用
Linux_forker
博客等级 码龄11年 3粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值