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

GDB的调试

gdb调试技巧
Debug 版本
Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人员,最常用的就是 debug 版本的可执行文件。
Debug 版本的生成:
因为调试信息是在编译过程时加入到中间文件(.o)中的,所以必须在编译时控制其生成包含调试信息的中间文件。
gcc -c hello.c -g —> 生成包含调试信息的中间文件
gcc -o hello hello.o
或者 gcc -o hello hello.c -g

Release 版本
Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版本。
首先将源代码编译、链接生成 Debug 版本的可执行文件,然后通过‘gdb Debug 版本的可执行文件名’进入调试模式。

调试程序:
调试的对象是:可执行程序;
在linux下调试需要
调试程序 : gdb
编译时需要增加调试信息 -g(变为debug版本)

gdb中常用的命令:


l显示代码;b+行号设置断点;info break查看断点信息;d 1 删除断点1;r启动程序;r -d;n单步执行,p打印,q退出;s进入函数;finish退出函数;c跳出循环一直运行而非单步到下一个断点停止C后没有断点程序执行到结束;bt当程序发生段错误时,GDB会停在错误发生的位置,你可以使用backtrace命令来查看堆栈跟踪信息,帮助你找到错误的源头;set print elements 0 
设置数组元素的最大打印数量。GDB 默认只显示数组的前 200 个元素(具体数量可能因版本而异),超过部分会用省略号 ... 代替。
参数 0 表示不限制打印数量,即显示完整的数组内容。

gdb 打印变量相关操作

格式	说明	示例
x	十六进制(hex)	p /x num
t	二进制(two's complement)	p /t num
d	十进制(decimal)	p /d num
s	字符串(string)	p /s str

gdb打印地址内存

一、直接打印指针变量
指针变量存储的就是内存地址,直接打印即可:gdb
(gdb) p ptr
$1 = (int*) 0x7fffffffe3fc  # 输出指针值(内存地址)
二、获取变量的内存地址
使用 & 运算符获取变量的地址:gdb
(gdb) p &var
$2 = (int*) 0x7fffffffe3f8  # 输出变量var的内存地址
三、以十六进制格式显示地址
使用 /x 修饰符强制以十六进制格式打印:gdb
(gdb) p/x ptr
$3 = 0x7fffffffe3fc(gdb) p/x &var
$4 = 0x7fffffffe3f8四、查看内存地址处的内容
使用 x 命令(examine memory)查看指定地址的内存内容:gdb
(gdb) x/4xw 0x7fffffffe3f8  # 查看地址处4个字(word)的十六进制内容
0x7fffffffe3f8: 0x00000001 0x00000002 0x00000003 0x00000004

如何gdb一个正在运行的程序

#查看进程id
1,ps axf | grep chengxu 
2,gdb -p 进程id
http://www.xdnf.cn/news/11976.html

相关文章:

  • HTB 靶机 SolarLab Write-up(Medium)
  • Nginx 安全设置问题
  • 计算机I/O系统:数据交互的核心桥梁
  • 论文导读 | 子图匹配最新进展
  • Office安装
  • C#编程过程中变量用中文有啥影响?
  • 【Python零基础入门系列】第7篇:Python中的错误与异常处理
  • 每日八股文6.4
  • C++ 变量二
  • geoai库的训练数据查看与处理
  • 核心机制:拥塞控制
  • 使用pgAdmin导入sql文件
  • 《波段操盘实战技法》速读笔记
  • 数据库-数据查询-in和Not in
  • Linux容器篇、第一章_01Linux系统下 Docker 安装与镜像部署全攻略
  • StringRedisTemplete使用
  • 智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
  • 算法训练第八天
  • 电气架构/域控制器/中央计算平台技术论坛
  • 考研系列—操作系统:冲刺笔记(4-5章)
  • 自动化测试工具playwright中文文档-------18.模拟
  • 宝塔使用docker创建n8n
  • 每日一令:Linux 极简通关指南 - 汇总
  • 树莓派超全系列教程文档--(54)如何使用rsync在计算机之间同步文件夹
  • MCPO:使用MCP工具为Open-WebUI/Ollama助力
  • 渗透测试服务如何全方位评估企业安全状况并揭示潜在缺陷?
  • SpringBoot(七) --- Redis基础
  • 在Windows11上安装 Ubuntu WSL
  • 大语言模型备案与深度合成算法备案的区别与联系
  • Rebel系列数据记录仪:智能车载数据采集专家