当前位置: 首页 > news >正文

Linux -- gdb/cgdb的认识和使用

预备知识

程序的发布⽅式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程
序,默认是 release 模式。
要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项,如果没有添加,程序⽆法被
编译,makefile中也需要加上。
$ gcc mycmd.c -o mycmd # 默认模式,不⽀持调试
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=82f5cbaada10a9987d9f325384861a88d278b160, for GNU/Linux
3.2.0, not stripped
$ gcc mycmd.c -o mycmd -g # debug模式
$ file mycmd
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=3d5a2317809ef86c7827e9199cfefa622e3c187f, for GNU/Linux
3.2.0, with debug_info, not stripped

常⻅使⽤

开始: gdb 目标文件
退出: ctrl + d quit 调试命令
使用实例:
这里在第五行打了一个断点 b 5 ,然后运行代码 r,代码在第五行这个位置停下了,l/list可以显示10行的代码,剩下的一些使用大家可以自己去尝试。
安装cgdb:
上⾯的基本调试还是⿇烦,虽然是⿊屏,但是还是想看到代码调试
推荐安装cgdb:
Ubuntu: sudo apt-get install -y cgdb
Centos: sudo yum install -y cgdb

watch

执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB 会暂停程序的执⾏,并通知使⽤者

GDB 会默认监控 当前作用域 中的变量:如果在函数内部设置观察点,且该函数有同名局部变量,则观察的是 局部变量。如果在全局作用域(如 main 函数开始前)设置观察点,则观察的是全局变量

添加条件断点

实例

新建断点时添加条件 b n(断点序号) if i==30

给已经存在的端点新增条件 condition n(断点序号) i==30
条件断点添加常⻅两种⽅式:1. 新增 2. 给已有断点追加
注意两者的语法有区别,不要写错了。
新增: b ⾏号/⽂件名:⾏号/函数名 if i == 30(条件)
给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if
http://www.xdnf.cn/news/689761.html

相关文章:

  • React Context 与状态管理:用与不用
  • 唯创WT2606B TFT显示灵动方案,重构电子锁人机互动界面,赋能智能门锁全场景交互!
  • 2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析
  • 让Qt窗口覆盖整个桌面区域(支持多屏幕桌面)
  • 软件工程期末速成--附带几道题
  • 高光谱成像相机:表型技术在林业育种和精确林业的应用
  • element-plus bug整理
  • 操作系统(Operator System)
  • 从0到1掌握Kotlin高阶函数:开启Android开发新境界!
  • .NET 9的AI亮点
  • Vue2+Vuex通过数组动态生成store数据(扁平模式)
  • Dockerfile正确写法之现代容器化构建的最佳实践
  • docker镜像与dockerfile
  • C++修炼:map和set的封装
  • 【线程与进程区别】
  • 高效合并 Excel 表格实用工具
  • AIoT赋能场馆数字化转型:智能管理新生态
  • 拨云见日:Arbitrum引领EVM的未来
  • Condition源码解读(二)
  • 4.8.2 利用Spark SQL计算总分与平均分
  • Flink 核心机制与源码剖析系列
  • spark- ResultStage 和 ShuffleMapStage介绍
  • 力扣HOT100之回溯:51. N 皇后
  • 电脑长期不关机会怎样?
  • 「Python教案」通用序列操作
  • 股指期货的基差跟升贴水概念
  • 力扣-找到字符串中所有字母异位符
  • JDBC+HTML+AJAX实现登陆和单表的CRUD
  • 互联网大厂Java求职面试:AI大模型推理服务性能优化与向量数据库分布式检索
  • linux 性能优化-内存