GDB调试工具命令速查

2023-10-26

1.生成调试信息

一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。
使用编译(gcc/g++)的 -g 参数可以做到这一点

$ gcc -g test.c
$ g++ -g test.cpp

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

2.启动GDB

  • 启动gdb

    $ gdb program

    (program 也就是你的执行文件,一般在当前目录下)

  • 设置运行参数

    (gdb) set args
    (gdb) set args 10 20 30 “hello world” 6.66

可指定运行时参数。(如:set args 10 20 30 40 50 )

(gdb) show args

(命令可以查看设置好的运行参数)

  • 启动程序

    (gdb) run

(程序开始执行,如果有断点,停在第一个断点处)

(gdb) start

(程序向下执行一行)

3.显示源代码

用list命令来打印程序的源代码。默认打印10行。

  • 打印第linenm行的上下文内容

    (gdb) list linenum

  • 显示函数名为function的函数的源程序

    (gdb) list function

  • 显示当前行后面的源程序

    (gdb) list

  • 显示当前行前面的源程序

    (gdb) list -

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

    (gdb) set listsize count

  • 查看当前listsize的设置

    (gdb) show listsize

4.断点操作

  1. 简单断点
    break 设置断点,可以简写为b

    (gdb) b 6
    (gdb) break 6

    (设置断点,在源程序第10行)

    (gdb) b func

    (设置断点,在func函数入口处)

2.多文件设置断点
C++中可以使用class::function或function(type,type)格式来指定函数名。
如果有名称空间,可以使用namespace::class::function或者function(type,type)格式来指定函数名。
Ø break filename:linenum – 在源文件filename的linenum行处停住
Ø break filename:function – 在源文件filename的function函数的入口处停住
Ø break class::function或function(type,type) – 在类class的function函数的入口处停住
Ø break namespace::class::function – 在名称空间为namespace的类class的function函数的入口处停住
3.查询所有断点

info break
info b
i break
i b

(上面所有都等同)

5.条件判断

一般来说,为断点设置一个条件,我们使用if关键词,后面跟其断点条件。
设置一个条件断点:

b test.c:8 if Value == 5

6.维护断点

1)delete [range…] 删除指定的断点,其简写命令为d。
如果不指定断点号,则表示删除所有的断点。range表示断点号的范围(如:3-7)。
比删除更好的一种方法是disable停止点,disable了的停止点,GDB不会删除,当你还需要时,enable即可,就好像回收站一样。
2) disable [range…] 使指定断点无效,简写命令是dis。
如果什么都不指定,表示disable所有的停止点。
3) enable [range…] 使无效断点生效,简写命令是ena。
如果什么都不指定,表示enable所有的停止点。

7.调试代码

  • run 运行程序,可简写为r
  • next 单步跟踪,函数调用当作一条简单语句执行,可简写为n
  • step 单步跟踪,函数调进入被调用函数体内,可简写为s
  • finish 退出进入的函数
  • until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u。
  • continue 继续运行程序,停在下一个断点的位置,可简写为c
  • quit 退出gdb,可简写为q

8.数据查看

查看运行时数据
print 打印变量、字符串、表达式等的值,可简写为p

(gdb) p count

(打印count的值)

9.自动显示

你可以设置一些自动显示的变量,当程序停住时,或是在你单步跟踪时,这些变量会自动显示。相关的GDB命令是display。

  • display 变量名
  • info display – 查看display设置的自动显示的信息。
  • undisplay num(info display时显示的编号)
  • delete display dnums… – 删除自动显示,dnums意为所设置好了的自动显式的编号。如果要同时删除几个,编号可以用空格分隔,如果要删除一个范围内的编号,可以用减号表示(如:2-5)
  • disable display dnums…
  • enable display dnums…
  • disable和enalbe不删除自动显示的设置,而只是让其失效和恢复。

10.查看修改变量的值

(gdb) ptype width – 查看变量width的类型
type = double

(gdb) p width – 打印变量width 的值
$4 = 13

你可以使用set var命令来告诉GDB,width不是你GDB的参数,而是程序的变量名,如:

set var width=47

(将变量var值设置为47)

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

GDB调试工具命令速查 的相关文章

  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • 来自守护程序的错误响应:加入会话密钥环:创建会话密钥:超出磁盘配额

    我尝试在我的服务器上安装 docker 使用本教程 https docs docker com install linux docker ce ubuntu 我想远程运行 docker 镜像并使用 portainer Web 界面来管理一切
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include

随机推荐

  • DDD(领域驱动设计)系列主题:聚合和聚合根

    本篇文章主要介绍了聚合根 聚合的概念 然后介绍了聚合的设计过程和原则 以及对比了聚合 聚合根 实体 值对象的特点 思考的问题 为什么要在限界上下文和实体之间增加聚合和聚合根的概念 它们的作用是什么 如何设计聚合 概念和职责 聚合根 如果把聚
  • 2020年数学建模国赛A题:炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • 虚拟机的快捷键

    ctrl alt 鼠标就出来了 ctrl c 中断当前操作
  • 谷粒商城--从入门到入坟(持续更新)第一篇:总体概括

    简介 谷粒商城项目 是尚硅谷的一套基于微服务的电商视频 在网上大受欢迎 本人系大三老狗 准备用大约一个月时间 去拆解该商品的知识点 由点及面 最后希望呈现一个比较好的效果 每个知识点 配套的安装软件及源码也会发布出来 希望有伙伴能一起进步
  • 自定义控件.DateTimePicker_02

    ZC 踩坑过程在 后面 1 在 Generic xaml 中添加内容
  • Unknown system variable 'query_cache_size' 问题终于解决了,原来是这样!

    遇到这种问题搞了半天终于解决 原因 mysql connecter java的版本过低 很显然是数据库驱动程序与数据库版本不对应 查看了一下配置 发现mysql connector java的版本是5 1 37 而我本地mysql版本是8
  • Mysql中explain执行计划信息中字段详解

    Mysql中explain执行计划信息中字段详解 1 获取执行计划 2 字段含义 2 1 id 2 2 select type 2 3 table 2 4 partitions 2 5 type 2 6 possible keys 2 7
  • qt 信号与槽的用法和定义

    转自 http blog csdn net kaffeel article details 5568954 信号和槽是Qt编程的一个重要部分 这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来 在前几个例子中 我们已经连接了信号
  • 通过OKhttp3 访问 https地址

    okHttp3添加信任所有证书 return public static OkHttpClient getUnsafeOkHttpClient try final TrustManager trustAllCerts new TrustMa
  • [分布式]可伸缩性最佳实践

    下面是我们认为的一些可伸缩性的最佳实践 异步 尽可能的使用异步 同步调用会导致两个服务的可用性绑在一起 意味着一个服务出问题或变慢 另一个也会受到影响 这点也是eBay一直强调的 泳道设计 错误隔离机制 避免一个失败影响全局 这种机制也有助
  • Pytorch遇到的问题及解决方案 - 更新ing

    1 安装完成后 不能import torch 提示 ImportError dlopen cannot load any more object with static TLS 解决办法 有很多答案都说是将import torch放在imp
  • Arduino学习模拟输入

    1 通过电位器控制led亮度 2 代码很简单 如下 void setup Serial begin 9600 串口初始化 波特率设置为9600 pinMode 9 OUTPUT 设置9脚为输出模式 void loop int analogI
  • CNN+GRU实现验证码端到端识别

    Part 0 模型概览 captcha overview png 从图片到序列实际上就是Image2text也就是seq2seq的一种 encoder是Image decoder是验证码序列 由于keras不支持传统的在decoder部分每
  • 应用配置管理

    本节课程要点 ConfigMaps 和 Secret 资源的创建和使用 Pod 身份认证的实现和原理 容器资源 安全 前置校验等配置和使用 细分为以下八个方面 需求来源 背景问题 首先一起来看一下需求来源 大家应该都有过这样的经验 就是用一
  • STM32F103 USB OTA升级BootLoader (一)

    1 配置外部高速晶振 2 勾选USB功能 3 将USB模式配置Virtual Port Com 4 将系统主频配置为72M USB频率配置为48M 5 配置好项目名称 开发环境 最后获取代码 6 修改Flash大小和勾选Use Micro
  • 人的梦想 是不会结束的!

    文章目录 前言 一 一年之约 1 学习嵌入式 2 探寻嵌入式之路 二 我的心跳 1 奉劝 2 行动 人的梦想是永远不会结束的 前言 随着在程序员这条路上不断发展 自己学得越多 就会感觉自己学的东西有多渺小 下面就说说2019年到2020年的
  • [ 对比学习篇 ] 经典网络模型 —— Contrastive Learning

    Author Horizon Max 编程技巧篇 各种操作小结 神经网络篇 经典网络模型 算法篇 再忙也别忘了 LeetCode 对比学习篇 经典网络模型 Contrastive Learning 01 InstDisc 结构框图 详解 效
  • 非科班自学计算机需要学习什么内容?

    文章目录 前言 一 方向 gt 语言的选择 1 1 语言vs方向 1 2 重要观点 二 自学方法 另外说到计算机相关基础推荐书籍 三 自学资源 前言 非计算机专业 又想通过自学找到计算机相关工作的同学还是很多的 并且这条路也是可行的 毕竟计
  • 2.2 Fabric核心配置文件的理解

    目标 了解Hyperledger Fabric对Peer节点的核心配置信息 了解Hyperledger Fabric对orderer节点的核心配置信息 任务实现 在Hyperledger Fabric中 有两个示例配置文件 一个为Peer节
  • GDB调试工具命令速查

    1 生成调试信息 一般来说GDB主要调试的是C C 的程序 要调试C C 的程序 首先在编译时 我们必须要把调试信息加到可执行文件中 使用编译 gcc g 的 g 参数可以做到这一点 gcc g test c g g test cpp 如果