用gdb调试C与C++程序

C++之GDB调试 Linux系统上关于GDB调试的一些命令语句 阅读详情
1.         GDB简介:
1)         介绍:
GDB是Linux下一个GNU调试程序,是用来调试C与C++程序的强力调试器。能够让用户在程序运行时观察程序的内部结构和内存的使用情况。
2)         功能:
Ø 按照自定义的方式启动运行需要调试的程序。
Ø 可以使用指定位置和条件表达式的方式来设置断点。
Ø 程序暂停时的值的监视。
Ø 动态改变程序的执行环境。
2.         编写示例程序:
为了以下示例容易演示,首先编写一个示例程序。
1)         创建一个C++文件:

2)         写入代码:

3.         基本操作:
这里只介绍常用命令的简单用法,如需读者想更加深入的了解,还请读者参照gdb手册。
1)         基本命令:
Ø 基本命令列表:

命令
解释
简写
file
装入想要调试的可执行文件
无
list
列出产生执行文件源代码的一部分
l
next
执行一行源代码但不进入函数内部
n
step
执行一行源代码而且进入函数内部
s
run
执行当前被调试的程序
r
continue
继续执行程序
c
quit
终止GDB
q
print
输出当前指定变量的值
p
btrak
在代码里设置断点
b
info break
查看设置断点的信息
i b
delete
删除设置的断点
d
watch
监视一个变量的值,一旦值有变化,程序停住
wa
help
GDB中的帮助命令
h
Ø 启动:

Ø file命令:

Ø list命令:

Ø next命令:

Ø step命令:

Ø run命令:

Ø continue命令:

Ø quit命令:

Ø print命令:

Ø break命令:

Ø info break命令:

Ø delete命令:

Ø watch命令:

Ø help命令:

2)         输入技巧:
Ø 自动补全:
l 键盘上Tab键
l 演示:

输入r后,按2下Tab键,GDB将会把所有是r开头的命令显示出来。输入ru后,按1下Tab键,如果以ru开头的命令只有一个,GDB将会把它自动补全。
Ø 执行上条语句:
l 键盘上回车键
l 演示:

4.         完整调试:
1)         代码分析:
分析示例程序可知此代码是一个从1到10的累加算法,其中定义了一个变量n来存储1-10的累加值,主函数中定义变量i切从1循环到10,每一个循环将i值传入add函数进行累加,并将每次累加后的n值打印出来。在add函数中模拟错误,当传入值为10时,运算n=n/(j-10)将导致除数为0的情况。
2)         编译运行与错误分析:
Ø 编译运行:

Ø 错误分析:
此时n值为45,i值为10,在计算45+10的时候,出现了浮点数例外的错误,那么也就是说在add()函数中计算n值的表达式有问题,这样我们可以下2个断点,在进入add()函数时下个断点,在运算n值表达式时下个断点。或者设置一个当j值为10的条件断点,从而分析其错误。
3)         调试选项:
Ø -g
l -g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序。GCC提供了一个很多其他C编译器里没有的特征,在GCC里你能使-g和-O联用。
l 演示:

4)         调试演示:
Ø 使用-g选项编译程序:

Ø 启动GDB:
l 通过直接启动的方式:

l 通过文件载入的方式:

Ø 查看源文件:

Ø 设置断点:
l 普通断点:
由错误分析可知,要在进入add()函数时下个断点,在运算n值表达式时下个断点,n值的运算有2个地方,一个是n=n+j(第7行),一个是n=n/(j-10)(第12行),从而分析其错误。

Info break为查看断点信息,可以看到我们在函数的入口(第5行)和n值运算(第7与12行)设置了断点。
l 条件断点:
设置一个当j值为10的条件断点。

l 删除断点:
使用del Num来删除断点。

Ø 调试:
l 使用普通断点:

使用r(run)运行程序后,程序在add函数入口(第5行)停下,此时j的值为1,由错误分析可知,要当j值为10时,程序运行出错,使用c(continue)程序继续运行,在n=n+j断下(第7行),此时j的值任然是1,再使用c程序继续运行,程序又在第5行断下,j值为2,说明主函数中一次循环完成,就这样不停的c,直至当j值为10时在第5行断下,使用n(next)单步调试,程序跳转到else里的运行内容n=n/(j-10),再使用n 单步调试执行n=n/(j/10),执行后报错,从而得到程序错误位置。
l 使用条件断点:

使用r(run)运行程序后,程序在第5行断下,由于所设置断点的条件为if j=10,所以此时的j值为10,使用p j(printj)输出此时j的值,使用n(next)单步调试,程序跳转到else里的运行内容n=n/(j-10),再使用n单步调试执行n=n/(j/10),执行后报错,从而得到程序错误位置。
l 说明:
此例并不是为了说明条件断点比普通断点好,只是为了灵活使用2种断点用法而举例,对于某一程序具体设置什么断点好还需另行分析。
Ø 退出:





【Linux | C++】GDB调试教程详解 Debug 版本和Release 版本。这两个版本在编译和构建时的设置不同,主要用于不同的目的。Debug 版本Debug 版本是为调试程序而构建的版本。它包含了额外的调试信息,可以帮助程序员在程序执行时观察和分析程序的内部状态。调试信息:编译时会生成调试信息(如变量名、行号等),以帮助调试工具(如 GDB)进行源代码级别的调试。优化关闭:通常会关闭编译优化,以便程序员可以准确地跟踪代码的执行流程和变量的变化。性能:由于缺少优化和额外的调试信息,Debug 版本通常运行较慢,性能较差。编译选项。 阅读详情

相关推荐

C C++最新【Linux】GDB保姆级调试指南(什么是GDB?GDB如何使用?(1),从入门到真香

⚡ :程序的发布方式有两种,

2401_84978623的博客 1045

C++ gdb调试

基础用法 1. 简介 GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下: GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3.当程序被停住时,可以检查此时你的程序中所发生的事。 4.动态的改变你程序的执行环境。 2 生成调试信息 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息...

红尘道,红尘练心 4724

用 gdb 调试 C/C++ 程序

          作者:zieckey (zieckey@yahoo.com.cn)        All Rights Reserved!                     Linux 下有一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强有力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能:   

聪明的解释器 1792

关于gdb调试的基本信息

GDB主要帮忙你完成下面四个方面的功能: 1. 启动程序,可以按照你的自定义的要求随心所欲的运行程序。 2. 可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3. 当程序被停住时,可以检查此时你的程序中所发生的事。 4. 动态的改变你程序的执行环境。 ### 14.2 生成调试信息 一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们...

luoxin97的博客 447

在 VSCode 中使用 GDB 进行 C/C++ 程序调试(图文版)

通过本文的指南,希望将能够在 VSCode 中配置和使用 GDB 进行 C/C++ 程序的高效调试。调试是编程中的一项重要技能,善用调试工具可以提高代码质量,加速开发周期。愿你在调试之旅中取得更多成功!

qq_64928278的博客 1万+

Fastjson2 2.0.26反序列化漏洞深度剖析:从原理到PoC构造

本文深度剖析了Fastjson2在2.0.26及之前版本中存在的反序列化漏洞。该漏洞允许攻击者通过构造包含恶意TemplatesImpl对象的JSONArray,并利用BadAttributeValueExpException触发,在反序列化过程中实现远程代码执行。文章从漏洞原理、PoC构造、利用链分析到防御建议,提供了全面的技术解读,帮助开发者和安全人员理解其危害并采取应对措施。

d3e4f的博客 1051

用GDB调试c/c++程序

GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的

学习分享 5543

PCB工艺-SI9000使用教程

本文介绍了阻抗计算工具SI9000的使用方法,重点讲解了微带线与带状线的区别、共面阻抗概念及参考面选择。通过USB差分走线实例,详细说明了如何选择计算模型、填写参数并确定线宽线距。文章还提供了层叠设计资料和工厂常规阻抗表格作为参考,建议制板时标注需控阻抗的线路供板厂调整。最后简单提及了嘉立创阻抗计算工具作为备选方案。

weixin_50120208的博客 2026

GDB调试C/C++程序【Linux安装gdb】

软件开发的一个重要工作是测试程序和排除错误。调试器是一个程序,可以在一个精确受控的环境中执行另一个程序。例如,调试器可以单步运行和跟踪程序,查看变量内容、内存位置,以及每条语句执行完成后CPU寄存器的变化情况。同时调试器也可以分析在执行到程序中给定位置之前的函数调用栈。GNU调试器(GDB)是一个功能强大、应用广泛的调试器。(http://www.gnu.org/software/gdb/documentation)通过命令gdb -version可以查看本机gdb的版本信息。参考资料: GDB调试C/C+

u013250861的博客 503

从理论到实践:基于Zemax的高分辨率生物显微镜光学系统仿真与优化指南

本文详细介绍了基于Zemax的高分辨率生物显微镜光学系统仿真与优化全流程。从阿贝分辨率公式、柯勒照明等理论基础出发,逐步讲解Zemax建模、像差优化、制造可行性分析等核心步骤,并提供常见问题解决方案。通过实际案例展示如何将理论设计转化为可制造的优化方案,帮助工程师掌握从仿真到实际应用的关键技术。

weixin_29229989的博客 482

Claude Code 实战指南:从入门到高效编程

本文是一份Claude Code实战指南,旨在帮助开发者从入门到精通这款AI编程助手。文章详细讲解了如何通过清晰的指令公式与Claude Code高效沟通,并展示了如何将其深度集成到日常开发工作流中,例如理解陌生代码、调试和生成测试文档。指南还提供了避坑建议与最佳实践,并通过构建一个天气查询CLI工具的完整案例,演示了如何利用Claude Code加速开发进程,实现从设计到代码的高效人机协作。

weixin_28339967的博客 484

2、GDB 调试 C/C++ 程序

GDB 调试 C/C++ 程序

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 1777

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用

PCIe(Peripheral Component Interconnect Express)是计算机硬件中重要的高速串行总线标准,广泛应用于存储、网络等设备连接。其核心原理是通过差分信号实现高带宽传输,PCIe Gen2 x1的理论带宽可达5Gbps。在嵌入式开发中,PCIe扩展技术能有效解决单板计算机接口不足的问题,特别适合树莓派等微型平台。ASMedia ASM1184e作为PCIe交换芯片,可将单个接口扩展为多个,支持热插拔且免驱动,极大提升了工程灵活性。通过PCIe交换机方案,开发者能在树莓派CM

weixin_42602368的博客 421

linux 调试 c程序工具,强大的C/C++ 程序调试工具GDB

分享下强大的C/C++ 程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdbprogram:准备调试程序。也可以直接进入gdb,再通过file命令加载。1.2 添加断点bfunction:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。1.3 运行程序runargs:开始运行程序,run后面可以加程序需要的参数,就像...

weixin_42423817的博客 318

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正

普通开普勒式望远镜光学设计1: 完成了望远镜的总体结构设计,确定其物镜与目镜的初始结构选型,使用Zemax软件完成望远镜的双胶合物镜的像差校正。

faust_cao的博客 1万+

用 Eclipse + GDB调试Android中C/C++程序

一、前期准备 1、编译通过的Android源代码(我是Android 2.3) 2、安装了CDT的Eclipse 3、重新编译Android gdbserver(非必须)         因手头Android 2.3源码编译后的版本执行gdbserver时报错:Segmentation fault,不得不重新编译gdbserver。参考博文:自己编译Androi

Simba's 3452

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

GDB 调试 android 本地 c/c++ 程序

本文来自 csdn ucser,    http://blog.youkuaiyun.com/perfectpdl   转载注明出处,谢谢. 有一段时间没弄Android了,整理一下,把之前 用GDB调试 Android jni程序过程共享一下: Android 应用层为JAVA语言,但有时需要C/C++实现一些特定功能,比如视频编解码,此时需要借助JAVA的JNI技术,用JAVA语言

RTC hacker 2824

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

用GDB调试Android中C/C++程序(命令行)

一、编译Android gdbserver(非必须)         因手头Android 2.3源码编译后的版本执行gdbserver时报错:Segmentation fault,不得不重新编译gdbserver。 1、编译gdbserver 编译过程参考博文:自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题

Simba's 2245

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

给我五分钟,带你快速入门C/C++程序调试利器:GDB

GDB(GNU Debugger)是一款功能强大的开源调试工具,它可以帮助开发者调试C/C++等语言编写的程序。无论是初学者还是经验丰富的程序员,掌握GDB的基本使用方法都是非常有益的。本文将带你走进GDB的世界,从基础到实用技巧,让你快速上手调试程序。GDB是GNU项目的一部分,由Free Software Foundation(FSF)开发。它支持多种操作系统平台,如Linux、Unix、Windows等。

Armey的博客 1162

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++调试器:GDB调试器【安装、使用】(gdb主要调试的是C/C++的程序)【安装gdb时默认安装gcc、g++】

GNU工具集中的调试器是GDB(GNU Debugger),该程序是一个交互式工具,工作在字符模式。除gdb外,linux下比较有名的调试器还有xxgdb, ddd, kgdb, ups。

u013250861的博客 3145

一篇搞定 gdb!Linux 下调试 C/C++ 程序的核心命令

n | | s/step | 单步执行,进入函数内部,逐语句F11 | step/s | | b/break 行号 | 在某一行设置断点 | break 10 | | b/break 函数名 | 在某个函数开头设置断点 | break main | | b/break 文件名:行号 | 在某个文件的某一行设置断点 | break mycmd.c:10 | | info b | 查看断点信息 | info b | | d/del 断点编号 | 删除断点 | del 1 | | disable 断点编号 | 禁

2402_83215991的博客 1265

linux的c 程序调试,强大的C/C++ 程序调试工具GDB

分享下强大的C/C++ 程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。1.2 添加断点b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。1.3 运行程序run args:开始运行程序,run后面可以加程序需要的参数,就像...

weixin_42565652的博客 343
上一篇: Linux下的vim配置和插件管理
下一篇: 终于解决了fedora 16下chromium浏览器Shockwave Flash崩溃的问题
windowsshaking
博客等级 码龄16年 11粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值