什么是gdb,gdb的简单用法

2023-11-20

在Linux中,gdb是GNU调试器(GNU debugger)的缩写。它是一个强大的命令行调试工具,用于调试C、C++和其他编程语言的程序。

使用gdb可以执行以下任务:

  • 启动程序并逐行执行代码
  • 设置断点,以便在特定位置停止程序执行
  • 检查变量的值和内存的内容
  • 跟踪函数调用和返回
  • 检测程序崩溃或错误的原因
  • 进行程序的动态分析和修复

gdb具有灵活的命令和选项,可以帮助程序开发人员调试复杂的代码,并找出程序中的错误。

--------------------------------------------------------------------------------------------------------------------------

使用 gdb 调试程序通常涉及以下基本步骤:

  1. 编译程序时启用调试信息。在使用 gccg++ 编译程序时,添加 -g 选项以生成调试信息。例如

    gcc -g myprogram.c -o myprogram
  2. 启动 gdb,并将可执行文件作为参数传递给它:

    gdb myprogram
  3. 设置断点(可选)。通过在代码的特定位置设置断点,使程序在该位置停止执行。可以使用以下命令设置断点:

    • 在某一行设置断点:break <line_number>
    • 在函数内设置断点:break <function_name>
  4. 开始执行程序。使用 run 命令启动程序,并在断点处停止执行(如果有断点设置):

    run
  5. 在程序停止执行时,您可以执行各种调试操作,例如:

    • 使用 next 命令逐行执行代码。
    • 使用 step 命令进入函数并逐行执行其中的代码。
    • 使用 continue 命令让程序继续执行直到下一个断点或结束。
    • 使用 print 命令打印变量的值。
    • 使用 backtrace 命令查看函数调用堆栈。
  6. 调试完成后,使用 quit 命令退出 gdb

以上只是 gdb 的基本用法,gdb 提供了众多功能和命令,可以根据需要进行更高级的调试操作。您可以通过 help 命令在 gdb 中获得更详细的帮助信息,例如 help break 获取关于设置断点的帮助。

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

什么是gdb,gdb的简单用法 的相关文章

  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • linux-x64 二进制文件无法在 linuxmusl-x64 平台上使用错误

    我正在安装Sharp用于使用 package json 的 Nodejs 项目的 docker 映像上的映像压缩包 当我创建容器时 我收到有关 Sharp 包的以下错误 app node modules sharp lib libvips
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4

随机推荐

  • vue router在同界面使用 this.$router跳转路由,mounted不再调用

    1 在vue中 刷新数据常用的办法是 this r o u t e r g o 0 或 者 t h i s router go 0 或者this router go 0 或者this router push path 在最近一次的使用时 发
  • 第三章 总线

    一 系统总线概念 系统总线是计算机内部各个组件之间传输数据和控制信息的通信线路 连接中央处理器 内存 输入输出设备 扩展插槽等各个组件 是计算机系统中最重要的硬件组成部分之一 具有数据传输 控制信号传输和总线协议等功能 系统总线的性能对计算
  • 登录即代表您同意 用户服务协议

    UILabel remindLabel if remindLabel remindLabel UILabel alloc init NSDictionary attributes NSFontAttributeName UIFont sys
  • 一文搞懂Mybatis原理

    文章目录 一 快速入门 二 查询流程分析 2 1首先通过ClassLoader读取配置文件生成输入流 2 2建造者模式加载配置创建SQLSessionFactory 2 2 1SQLSessionFactoryBuilder builder
  • 排序算法(2) 快速排序——快排原理以及快排函数qsort

    上次我们分享了一个基本排序方法 冒泡排序的使用 今天我们来分享第二种排序方法 快速排序 快速排序 我们简称快排 我们先来回顾一下上次的冒泡排序 冒泡排序就是在一个序列里 两两比较并根据大小关系进行换位处理 经过多次从头到尾的比较 从而实现整
  • 百面A/B测试

    1 在对模型进行过充分的离线评估之后 为什么还要进行在线A B测试 1 离线评估无法完全消除模型过拟合的影响 因此 得出的离线评估结果无法完全替代线上评估结果 2 离线评估无法完全还原线上的工程环境 一般来讲 离线评估往往不考虑线上环境的延
  • 华为OD机试真题- 日志首次上报最多积分【2023Q1】

    题目描述 日志采集是运维系统的的核心组件 日志是按行生成 每行记做一条 由采集系统分批上报 如果上报太频繁 会对服务端造成压力 如果上报太晚 会降低用户的体验 如果一次上报的条数太多 会导致超时失败 为此 项目组设计了如下的上报策略 1 每
  • 三种出包命令npm, yarn, webpack的对比

    在出包的时候 总是会在不同项目里看到不同的出包命令 但留心观察了一下 最常被使用的就是下面这三个 npm run XXX yarn run XXX webpack entry file destination for bundled fil
  • C++---之waitKey()函数

    waitKey 函数详解 1 waitKey 这个函数是在一个给定的时间内 单位ms 等待用户按键触发 如果用户没有按下 键 则接续等待 循环 2 如下所示 while 1 if waitKey 100 27 break 在这个程序中 我们
  • eclipse maven 导出项目依赖的jar包

    本文转自至 http blog csdn net andyliulin article details 46544555 一 导出到默认目录 targed dependency 从Maven项目中导出项目依赖的jar包 进入工程pom xm
  • Qt在windows和linux下使用默认浏览器打开设置的链接

    QString webstr http www baidu com 设置要打开的网页 bool openService QDesktopServices openUrl QUrl webstr 使用默认浏览器打开 if openServic
  • Testflight 添加外部测试人员

    内部测试人员 不需要提供所有的metadata 外部测试人员 为了使得外部人员可以测试app的预发布build 必须提供如下的metadata What to test App description Feedback email Mark
  • 利用Python读取MongoDB的数据

    近日在处理数据的时候遇到一个问题 数据存储在MongoDB数据库 如图1 而MongoDB模式自由 具有很大的灵活性 可以把不同结构的文档存储在同一个数据库里 即表的字段不是完全固定的 当某个字段有值时就会显示该字段 而当该字段没有值时就不
  • 3.git 将本地仓库推到远程

    1 创建一个本地仓库 git init 2 把文件添加到版本仓库中 git add 3 生成提交记录 git commit m git init 4 关联到远程库 git remote add origin 你的远程库 5 获取远程库与本地
  • jsoncpp封装和解析字符串、数字、布尔值和数组

    使用jsoncpp进行字符串 数字 布尔值和数组的封装与解析 1 下载jsoncpp的代码库 百度网盘地址 http pan baidu com s 1ntqQhIT 2 解压缩文件 jsoncpp rar unzip jsoncpp ra
  • 解决BeanNotOfRequiredTypeException办法(@Autowired和@Resource注解的不同)

    1 错误信息 org springframework beans factory BeanNotOfRequiredTypeException Bean named aisleService must be of type com gdie
  • Nmap源码分析(主机发现)

    Nmap源码分析 主机发现 2012年8月9日 Nmap在进行真正的端口扫描之前 通常需要确定目标主机是否在线 主机发现过程 以免发送大量探测包到不在线的主机 主机发现作为Nmap的基本功能之一 用户也可以单独运用 例如 仅仅需要确定局域网
  • 盘点3款超好用的免费录屏软件,快来看!

    在现代数字化社会中 录屏软件成为了各行各业中必备的工具之一 用于记录操作步骤 制作教程 分享游戏精彩瞬间等 而寻找一款免费的 功能强大的录屏软件也变得越来越重要 本文将为您介绍3款免费录屏软件 并详细说明使用步骤 帮助您找到适合自己需求的录
  • 制作OLED图标

    制作OLED图标 陈拓 2021 06 24 2021 06 26 1 概述 制作用于OLED显示的图标 获取C语言图像点阵数据 2 图标库 先准备图标图像 可以从图标库中找需要的图案 下面两个是我常用的图标网站 2 1 Font Awes
  • 什么是gdb,gdb的简单用法

    在Linux中 gdb是GNU调试器 GNU debugger 的缩写 它是一个强大的命令行调试工具 用于调试C C 和其他编程语言的程序 使用gdb可以执行以下任务 启动程序并逐行执行代码 设置断点 以便在特定位置停止程序执行 检查变量的