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

gdb调试工具

文章目录

  • 1.GDB的作用
  • 2.GDB的安装
  • 3.gdb使用
  • 4.使用vim显示代码行号
  • 5.使用gdb在调试过程中显示某一行附近的代码
  • 6.使用gdb单步调试功能
  • 7.中途查看变量值
  • 8.显示与删除断点信息
  • 9.通过地址访问变量数值
  • 10.显示当前寄存器上的值
  • 11.查看进程
  • 12.查看对应的汇编指令
  • 参考资料


gdb是GNU Project Debugger的简称,也是GNU(GNU’s Not Unix)开源项目中遵循GPL发行许可证的free software。

1.GDB的作用

一般来说,GDB注意提供以下四个方面的帮助:

  1. 指定一些参数
  2. 断点
  3. 分析crash现场
  4. 直接修改程序,看结果

2.GDB的安装

sudo apt-get install gdb
gdb --version
在这里插入图片描述

3.gdb使用

  1. gdb 程序
  2. 程序出现问题时 gdb 程序 core
  3. 调试正在运行的进程(前提是当前进程有输出信息)

示例:
vim test.c
CTR+ALT+T打开另外一个命令栏
gcc -o bin test.c -g
gdb ./bin

退出gdb调试:q
在这里插入图片描述gdb ./bin -q (可以省略gdb版本等信息)
run(执行)

4.使用vim显示代码行号

:set nu
在这里插入图片描述

5.使用gdb在调试过程中显示某一行附近的代码

gcc -o bin test.c -g(编译,输出bin文件)
gdb ./bin -q(调试,简洁输出)
list 7(显示第7行附近的代码)
在这里插入图片描述

6.使用gdb单步调试功能

break 7(在程序第7行添加断点)
break 函数名(在函数入口处添加断点)
run(运行,可以简写为r)
next(单步执行)
c(continue,继续执行)

7.中途查看变量值

设置断点 break 7(行号)
运行到断点
print 变量名称(查看变量的值)
set var 变量=30(中途修改变量的值)

8.显示与删除断点信息

info break (显示断点信息)
delet 断点序号(删除断点)
在这里插入图片描述

9.通过地址访问变量数值

break 7
r
print &变量名(打印变量的地址)
x 内存地址(以16进制显示对应地址上存放的信息,比如变量的数值)
x /d 内存地址(以10进制显示对应地址上存放的信息,比如变量的数值)

10.显示当前寄存器上的值

info register(显示当前寄存器上的值)
在这里插入图片描述

11.查看进程

info thread(查看当前进程)
thread 1(进程号)
在这里插入图片描述

12.查看对应的汇编指令

disass
在这里插入图片描述


参考资料

  1. 【嵌入式C语言高阶版】https://www.bilibili.com/video/BV1qCSkY7EyD?p=5&vd_source=2530ffd02d9c0529a10f9f95fa54a4ab

  2. gcc编译器https://blog.csdn.net/weixin_46187287/article/details/149233337?spm=1011.2415.3001.5331

  3. vim编辑器简单使用https://blog.csdn.net/weixin_46187287/article/details/149205361?spm=1011.2415.3001.5331

http://www.dtcms.com/a/271684.html

相关文章:

  • Lingo软件学习(一)好学爱学
  • DPDK graph图节点处理框架:模块化数据流计算的设计与实现
  • dify配置邮箱,密码重置以及邮箱邀请加入
  • 【Java】【字节面试】字符串中 出现次数最多的字符和 对应次数
  • HTML应用指南:利用GET请求获取全国山姆门店位置信息
  • 跨服务sqlplus连接oracle数据库
  • 如何卸载本机的node.js
  • 源码角度解析 --- HashMap 的 get 和 put 流程
  • 前端使用fetch-event-source实现AI对话
  • AI Agent:我的第一个Agent项目
  • 爬虫-数据解析
  • [C语言初阶]操作符
  • ZeroMQ 代理架构实现(Python 服务端 + C++ 代理 + C++ 客户端)
  • RabbitMQ 4.1.1-Local random exchange体验
  • 解决Ollama下载太慢问题
  • Claude Code 环境搭建教程
  • Java SE--继承
  • Python 机器学习核心入门与实战进阶 Day 7 - 复盘 + 综合实战挑战
  • NW658NW659美光固态闪存NW660NW708
  • 陶哲轩:数学界的莫扎特与跨界探索者
  • 离线二维码生成器,无需网络快速制作
  • 神经网络基础及API使用详解
  • 【项目经理】经典面试题0002:项目经理和交付经理的区别?
  • 变频器实习DAY3
  • S7-1500——(一)西门子PLC编程从入门到精通3、基于TIA 博途结构化控制语言——SCL(一)
  • 全连接神经网络(MLP)原理与PyTorch实现详解
  • 【freertos-kernel】MemMang
  • Deepseek搭建智能体个人知识库
  • LeetCode经典题解:1、两数之和(Two Sum)
  • Python Day8