【gdb调试器】gdb的调试参数和使用方法

2023-05-16

"江山不负英雄泪"

  • GDB调试器
    • GDB主要功能
    • 常用调试命令参数
  • 小例子测试gdb
    • 编译生成可执行文件
    • 调试查看

GDB调试器

  • GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是linux系统开发C/C++最常用的调试器
  • 程序员可以使用GDB来跟踪程序中的错误从而减少工作量
  • VSCode是通过调用GDB调试器来实现C/C++的调试工作的

GDB主要功能

  1. 设置断点(断点可以是条件表达式)
  2. 使程序在指定代码行上暂停执行,便于观察
  3. 单步执行程序,便于调试
  4. 查看程序中变量值的变化
  5. 动态改变程序的执行环境
  6. 分析崩溃程序产生的core文件

常用调试命令参数

在调试开始时:执行gdb 可执行文件,进入gdb调试程序.常用参数如下:
下面命令括号内为简写,比如run和r同意

$(gdb) help(h)                 #查看命令帮助
$(gdb) run(r)                  #重新开始运行文件
$(gdb) start                   #单步执行
$(gdb) list(l)                 #查看源代码,(list-n, 从第n行开始查看代码,list+函数名:查看具体函数)
$(gdb) set                     #设置变量的值
$(gdb) next(n)                 #单步调试(逐过程,  函数直接执行)
$(gdb) step(s)                 #单步调试(逐语句:跳入自定义函数内部执行)
$(gdb) backtrace(bt)           #查看函数调用的栈帧和层级关系
$(gdb) frame(f)                #切换函数的栈帧
$(gdb) info(i)                 #查看函数内部局部变量的数值
$(gdb) finish                  #结束当前函数 返回函数调用点
$(gdb) continue(c)             #继续运行
$(gdb) print(p)                #打印值和地址
$(gdb) quit(q)                 #退出gdb
$(gdb) x                       #查看内存x/20xw 显示20个单元, 16进制, 4字节每单元
$(gdb) run argv[1] argv[2]     #调试时命令行传递参数
$(gdb) break+num(b)            #在第num行设置断点
$(gdb) info breakpoints(i b)   #查看所有设置的断点
$(gdb) delete breakpoints num(d)   #删除第num个断点
$(gdb) display                 #追踪查看具体变量值
$(gdb) undisplay               #取消追踪观察变量
$(gdb)  watch                  # 被设置观察点的变量发生修改时,打印显示
$(gdb) i watch                 #显示观察点
$(gdb) enable breakpoints      #启用断点
$(gdb) disable breakpoints     #禁用断点

小例子测试gdb

我们的sum.cpp源码如下:

#include<iostream>
using namespace std ;

int main(int argc, char * argv[])
{
	int N = 100 ;
	int sum = 0 ;
	int i = 1 ;
	
	while(i <= N)
	{
		sum = sum + i ;
		i = i + 1 ;
	}
	
	cout << "sum = " << sum << endl ;
	cout << "The program is over " << endl ;
	
	return 0 ;
}

编译生成可执行文件

在编译时一定要加入-g参数来允许GDB调试(尽管这会使可执行程序耗费更多资源):

g++ -g sum.cpp -o sum

调试查看

  1. 输入 gdb num 进入调试界面
  2. 在命令行模式下:set nu显示行号
  • 建议调试GDB时,另起一控制台显示程序和行号,如下:
    在这里插入图片描述

  • 给13行打断点:b 13

  • 运行至断点run

  • 查看一次i的值,print i ,只会查看一次

  • 持续查看i的值,display i ,在每次执行,都会展示一次i的值

  • 退出gdb调试q

  • 按enter会执行上一条指令

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【gdb调试器】gdb的调试参数和使用方法 的相关文章

  • 在GDB中,如何在程序停止时自动执行命令? (如显示)

    我希望每次程序停止时自动执行一些命令 就像 display 对 x 所做的那样 我怎么做 这是我发现的简单方法 define hook stop commands to be executed when execution stops en
  • 显示 GDB 中当前的汇编指令

    我正在 GDB 中进行一些汇编级调试 有没有办法让 GDB 以与显示当前源代码行相同的方式显示当前的汇编指令 每个命令后的默认输出如下所示 0x0001433f 990 Foo bar p 这给了我当前指令的地址 但我必须继续参考disas
  • 在 Linux 上以编程方式为 gdb 在 C 或 C++ 代码中设置断点

    如何以编程方式在 C 或 C 代码中设置适用于 Linux 上的 gdb 的断点 I e int main int argc char argv set breakpoint here int a 3 a In gdb gt print a
  • 如何判断共享库加载到进程地址空间中的位置?

    我正在尝试调试一个共享库 其中有使用 gdb 的源代码和调试符号 我没有实际使用此共享库的进程的调试符号或代码 我自己编译它 所以我可以拥有一切 但生成的二进制文件被剥离 以模拟我没有代码的情况 该进程打印我正在尝试调试的目标函数 foo
  • 使用 gdb 在指定的可执行文件之外单步执行汇编代码会导致错误“无法找到当前函数的边界”

    我在 gdb 的目标可执行文件之外 甚至没有与该目标对应的堆栈 无论如何 我想单步执行 以便我可以验证汇编代码中发生了什么 因为我不是 x86 汇编方面的专家 不幸的是 gdb 拒绝进行这种简单的汇编级调试 它允许我设置并停止在适当的断点上
  • gdb:“未加载符号表”

    尝试在 gdb 中添加断点时 我不断收到此错误消息 我使用这些命令来编译 gcc g main c utmpib2 c o main o and cc g main c utmpib2 c o main o and also g g mai
  • gdb 输入文件中的十六进制值

    我正在尝试通过使用 gdb 内的 run 我可以成功地溢出程序 但在将十六进制值附加到字符串时遇到问题 我尝试过引用 将 mem addr 的值转换为 ascii 以及各种转义尝试 但没有成功 输入文件示例 AAAA x42 在上面的示例中
  • 如何从 gdb 命令提示符执行外部命令?

    我正在使用 gdb 调试程序 每当我错过断点或决定添加另一个观察点时 我必须终止该进程并重新运行它 为了将现有的 gdb 附加到它 我使用attach
  • 使用 gdb 调试时彻底退出 valgrind

    我正在使用 valgrind 和 gdb 调试程序 然而 我以一种野蛮的方式终止了这些调试会话 这真的是它应该做的吗 设置调试会话 按照来自的指示valgrind 官方网站 http valgrind org docs manual man
  • 在 gdb 中设置应用程序关联

    有没有一种简单的方法可以设置我正在调试的应用程序的亲和力 而无需将 gdb 锁定到同一核心 我问的原因是应用程序以实时优先级运行 并且需要在单核上运行 目前我使用这个命令行 taskset c 3 gdbserver 1234 app ou
  • 代码::块 - 警告:GDB:无法设置控制终端:不允许操作

    我已经通过官方存储库在 Ubuntu 14 04 中安装了 Code Blocks 13 12 当我编译时 一切正常 但是当我调试时 shell 中会显示以下消息 警告 GDB 无法设置控制终端 操作不正确 允许的 程序执行到断点 但当我执
  • gdb 中的 是什么意思?

    gdb n 134 a b c 0xdeadbeef uint32 t length initval gdb n gdb p a 30
  • 为什么 GDB 启动一个新的 shell 以及如何禁用此行为?

    我正在解决一个问题 即从 GDB 启动应用程序会导致符号查找错误 但从 shell 启动它却可以 事实证明 每当你从 GDB 中启动一个程序时 它都会启动一个新的 shell 从而覆盖我在启动 GDB 之前设置的所有环境变量 例如LD LI
  • 在 C 程序中追踪数组越界访问/写入的推荐方法

    考虑用 C 语言编写一些不太明显的算法的实现 例如 让它成为递归快速排序 我在 K N King 的 C 编程 现代方法 第二版 书中找到了它 可以从here http knking com books c2 programs qsort
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • gdb 声称它不知道如何运行

    我在 Mac Pro 上的 Mac OS X 10 6 6 上使用 Xcode 3 2 3 来构建 GrowlTunes 的修订版 5fd480ef577f咆哮开发存储库 http growl info hg growl developme
  • “gdb”调试器奇怪地跳过断点

    这是我的代码的一小段 l2tp inspector cc 14 else if f info gt key proto UDP PROTO 15 if size gt 4 16 uint32 t l2tp part 17 l2tp part
  • GDB - 将地址映射到源代码中的行和列

    gcc 和 clang 都有选项 gcolumn info 描述如下 将位置列信息发出到 DWARF 调试信息中 而不仅仅是文件和行 我已经使用此选项编译了我的二进制文件 现在我有一些指令的地址 想将其翻译回源文件 行号和列 有没有办法在g

随机推荐

  • PX4 Offboard Control with MAVROS--Takeoff(一键起飞)

    警告 xff1a 请先在仿真环境下进行测试 xff0c 能达到预期效果后在进行实际飞行测试 xff0c 以免发生意外 本篇文章只是用作学习交流 xff0c 实际飞行时如出现意外情况作者不予以负责 所需材料 1 PIXhawk或者Pixrac
  • Linux:查看网络信息和网络监控命令。

    ifconfig 该命令用于查看机器挂载的网卡情况 使用方式 ifconfig a 命令输出 可见机器有两个网卡 xff0c 一个时eth0 xff0c 另一个是本地回环虚拟网卡 另外 xff0c iproute2软件包含一个强大的网络配置
  • 胡晓明:“自主研发、共生共存、不碰数据是我们的三条生命线”

    5月23日 xff0c 在云栖大会 武汉峰会上 xff0c 阿里云总裁胡晓明系统阐述了这家公司坚守的三条生命线 坚持自主研发之路 xff0c 拿来主义 盖不出高楼大厦 xff0c 自主研发的云才能走得更远 xff1b 生态是阿里巴巴血液里流
  • 视觉SLAM十四讲

    内部交流 xff0c 写的很乱 xff0c 各路大神不建议观看以免影响思路 1 激光SLAM 激光SLAM相对成熟 xff0c 比如2005年出版的 概率机器人 中就介绍了很多关于激光SLAM的知识 xff0c 在ROS里也能找到许多关于激
  • 推荐几本学习c++的靠谱书

    入门推荐 C 43 43 Primer Plus 第6版 中文版 C 43 43 程序设计经典教程 xff0c 畅销30年的C 43 43 大百科全书 xff0c 零基础自学C 43 43 入门 C 43 43 是在 C 语言基础上开发的一
  • Python进阶书籍经典书有这样三本

    1 Python核心编程 xff08 第3版 xff09 Core Python Applications Programming xff08 3rd Edition xff09 美 Wesley Chun 著 xff0c 孙波翔 xff0
  • PID控制算法 无人机的精准悬停 机器人和机械臂的运动系统 飞机和火箭的姿态调整

    目录 应用数学公式机器人为例无人机为例PDI总结参考链接 应用 空调的温度控制 无人机的精准悬停 机器人和机械臂的运动系统 飞机和火箭的姿态调整 数学公式 机器人为例 无人机为例 P D I
  • Docker容器图形界面显示(运行GUI软件)的配置方法

    0 环境说明 Ubuntu 16 04 docker 1 35 1 Docker的 可视化 Docker本身的工作模式是命令行的 xff0c 因为主要的使用场景可能是做服务器后端方面的比较多 但有时候我们会有在docker容器里运行一些图形
  • 即时通讯 3

    即时通讯 3 内容待写
  • HMC5883L 磁力计校准

    原文地址 xff1a http blog sina com cn s blog 402c071e0102v8ie html 这里针对 HMC5883L 磁力计 的校准 xff0c 做一个简单讲解 欢迎交流 xff0c 新浪长沙 64 Wal
  • linux下如何编译c++工程项目

    首先 xff0c 你必须 有一 个Linux开发环境 xff0c 这样才能进行C 43 43 开发 笔者用的是安装在虚拟机中的Ubuntu 9 04 xff0c Ubuntu操作系统是没带C 43 43 编译器g 43 43 在连网的情况下
  • 【ROS程序】 --- 4-1. URDF-GAZEBO 文件介绍

    没人天赋异禀 xff0c 介绍两种实现对比发现 gaze中的urdf文件1 碰撞参数设置2 惯性矩阵设置3 颜色设置 介绍 在前边提过的rviz中 xff0c 只负责整体机器人的建模和运动 xff0c 而在gazebo中集成urdf文件则需
  • 【ROS机器人】 --- 2-2.slam建图保存

    山无拦 海无遮 xff01 前期准备建图I 运行机器人 gazebo II 建图文件编写III 配置rviz并保存1 添加机器人和雷达2 添加TF3 地图map4 保存配置 IV 控制运动建图V 保存地图1 map server2 保存查看
  • 【ROS机器人】 --- 2-4. 路径规划_move_base

    我回来啦 前期准备基础知识1 action通信2 代价地图及组成3 碰撞算法 文件详解及过程I 集成参数的launch文件II 配置文件1 costmap common params yaml2 global costmap params
  • 【ROS机器人】 --- 2-5.自主导航并slam建图

    压线才低头 前期准备基础知识编写launch文件执行流程最后重写launch文件 本节目标 xff1a 加载一张未知地图 xff0c 为机器人设置目标点 机器人会边走路 边建图 最后还可以用map server保存 实现 xff1a 打开g
  • [xdm+ip]ubuntu下载数据慢或者不通

    解决了从官网下载kitti数据集慢的问题 1 改ip 测ping2 更改 etc hosts文件3 使用xdm工具4 配置浏览器和xdm5 使用 环境 ubuntu20 04 问题 从kitti数据集官网下载数据集慢或不通的问题 使用过we
  • 【Docker】--5.docker图形化(享用主机的屏幕)

    心向骄阳万丈光 1 主机操作2 初始化容器3 注意查看效果 docker图形无法显示 网上流传两种方法解决 一种是lightdm 容器初始化好后 另一种是我亲测有用的这种 初始化容器时 1 主机操作 安装 span class token
  • [ros+python]无法rosrun 导入自定义.py文件的python可执行文件

    问题描述 在ROS环境下 自定义a py文件作为模块 被b py引用 rosrun b的时候疯狂报错 not found python文件可以单独用python编译器跑通过 放在rosrun下边就不对 解决办法 删除掉工作空间下之前编译残留
  • 【从kitti开始自动驾驶】--9.1 利用IMU/GPS测距并比较效果(jupyter)

    义勇添青史几段 1 基础知识1 1 角度计算1 2 距离计算 2 python程序编写2 1 大圆距离公式函数2 2 a GPS测距离2 2 b IMU测距离2 3 绘图2 4 效果展示2 5 结论 3 Measure distance源码
  • 【gdb调试器】gdb的调试参数和使用方法

    34 江山不负英雄泪 34 GDB调试器GDB主要功能常用调试命令参数 小例子测试gdb编译生成可执行文件调试查看 GDB调试器 GDB GNU Debugger 是一个用来调试C C 43 43 程序的功能强大的调试器 是linux系统开