首页 > 其他分享 >gdb的使用

gdb的使用

时间:2024-11-05 20:15:09浏览次数:3  
标签:变量 代码 gdb VS 使用 断点 调试

目录

一:debug和release版本

二 gdb调试

2.1展开代码 

2.2运行程序 r

2.3断点   

2.4调试 

2.5显示变量

2.6跳转到某行

2.7从一个断点到另一个断点 

2.8函数级别运行

2.9退出调试器

2.10显示全部的临时变量

2.11其他命令 

2.12条件断点 

三:cgdb 可视化代码的调试


一:debug和release版本

程序的发布方式有两种,debug模式和release模式

Linux gcc/g++出来的二进制程序,默认是release模式

使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,即debug版本

二 gdb调试

安装gdb:

//在普通用户下,使用sudo短暂提权,来下载gdb
sudo yum install -y gdb

命令:

gdb + 可执行程序

2.1展开代码 

l:直接回车会显示部分代码,可以持续按回车,直到代码显示完整

l+数字:会展开部分代码,一般要看的改行代码,在所展示代码的中间位置

l +函数名 :看对应的函数eg:l main , l Sum

 l + 文件名 : 行号:看对应文件的改行代码,适用于多文件

2.2运行程序 r

r:在没有断点的情况下,直接跑完程序,如果有断点,会在运行到断点处停止,相当于VS调试下的F5

.

2.3断点   

b + 数字 :在该行处打断点(相当于VS中的F9)

b + 文件名:行号:在对应文件处打断点

查看断点:info b  

删处断点:d +  断点编号(上图中框的Num)

在一个调试周期中,断点编号是线性递增的。

禁用断点:disable + 断点编号

 启用断点:enable+断点编号

2.4调试 

n(next):逐过程调试,不进入函数,相当于VS的F10

s(step):逐步调试,相当于VS中的F11

2.5显示变量

类似与VS中的调试窗口,可以看见我们想看到的变量的变化

display+变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay + 编号:取消对变量的跟踪 

 

跟踪变量的编号在一个周期内也是线性递增的

2.6跳转到某行

until + 行号

2.7从一个断点到另一个断点 

类似于在VS中有多个断点的情况下,按F5,跳转到下一个断点

c:跳转到下一个断点

2.8函数级别运行

finish : 执行到当前函数返回,然后挺下来等待命令

2.9退出调试器

quit:退出调试器

2.10显示全部的临时变量

info locals : 将main函数中定义的临时变量显示出来,相当于VS中的调试的自动窗口

2.11其他命令 

watch+变量:一旦这个变量变化,就会通知,也算是断点的一种

d+编号:去掉watch的通知

 

set var 变量 = 一个值

在调试过程中可以修改一个变量的值

2.12条件断点 

1.新增条件断点:b + 数字 + if  + 条件

2.给已有断点追加条件

condition +断点编号+条件

三:cgdb 可视化代码的调试

命令和gdb的一样,但是它可以看见代码

安装命令:

yum install -y cgdb

标签:变量,代码,gdb,VS,使用,断点,调试
From: https://blog.csdn.net/2301_80096514/article/details/143511607

相关文章

  • Cursor使用
    Cursor是一款AI代码编辑器,官网地址为https://www.cursor.com/,直接在官网下载安装即可,基于VSCode二次开发而来,之所以没有采用插件方式,在官方网站上给出的答案是某些功能插件无法实现,产品专注在使用AI来进行编程方面,价格方面还不便宜,Pro单月20刀,企业版单月单个用户40刀,但某些功能......
  • 【Azure App Service】使用Microsoft.Office.Interop.Word来操作Word文档,部署到App Se
    问题描述在.NET项目中,使用Microsoft.Office.Interop.Word组件来操作Word文档,使用了Microsoft.Office.Interop.Word.Document对象中的Open和SaveAs方法。##打开文件doc=app.Documents.Open(refinputFile,refnullobj,refnullobj,refnullobj,refnullobj,refnullobj,......
  • 在 Vue 2 项目中使用 Element UI
    在Vue2项目中使用ElementUI本实验手册将指导你如何在Vue2项目中使用ElementUI组件库,搭建一个简单的页面。一、介绍ElementUIElementUI(Element-网站快速成型工具)是一套基于Vue2.0的桌面端组件库,提供了丰富的、可复用的UI组件,可以帮助开发者快速构建美观、......
  • 使用 R 语言实现简单的文字识别程序
    在这篇文章中,我们将使用R语言来实现一个简单的文字识别程序。R语言是一个强大的统计计算与数据分析语言,通常被用于数据科学和统计分析中。我们将手动编写图像处理和字符识别步骤,演示如何利用R来完成文字识别任务。环境准备首先,你需要安装R和一些必要的包。可以从R的官......
  • 使用 requests 创建 Cookies 时遇到“系统不知道 filename 哪来的”错误,如何修复?
    在使用requests库创建Cookies时,开发者有时可能会遇到“系统不知道filename哪来的”这样的错误提示。这类错误通常与使用Cookies时的文件路径或文件名问题相关,尤其是在处理Cookie存储时,可能会产生一些文件系统的误解。本文将探讨此错误的产生原因,并提供相应的修复方法。......
  • 2款使用.NET开发的数据库系统
    前言今天大姚给大家分享2款使用.NET开发且开源的数据库系统。GarnetGarnet是一款由微软研究院基于.NET开源的高性能、跨平台的分布式缓存存储数据库,该项目提供强大的性能(吞吐量和延迟)、可扩展性、存储、恢复、集群分片、密钥迁移和复制功能。并且无需做任何修改可以与现有的Re......
  • C++20 STL CookBook 4:使用range在容器中创建view
    目录rangeviewrange_adaptor的三个概念以std::string和std::string_view为例子初次入手补充ranges的一些操作rangeviewrange_adaptor的三个概念新的范围库是C++20中更重要的新增功能之一。它为过滤和处理容器提供了新的范例。范围为更有效和可读的代码提供了简......
  • 【保姆级教程】使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD
    内容预览≧∀≦ゞ终端美化指南——oh-my-posh和clink篇引言一、准备工作默认终端:WindowsTerminal离线安装步骤包管理器:scoop为什么选择使用Scoop安装?scoop安装scoop常用命令字体下载二、配置WindowsTerminal三、配置oh-my-posh安装激活oh-my-posh编辑P......
  • 举例说明什么情况下会更倾向于使用抽象类而不是接口
    接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。接口vs抽象类 继承限制:Java中,一个类只能继承一个类,但可以实现多个接口。继承一个类意味着失去了继承其他类的机会。行为表示:接口通常用于表示附加的行为......
  • 举例说明什么情况下会更倾向于使用抽象类而不是接口
    接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。接口vs抽象类 继承限制:Java中,一个类只能继承一个类,但可以实现多个接口。继承一个类意味着失去了继承其他类的机会。行为表示:接口通常用于表示附加的行为......