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

GDB的使用

GDB(GNU Debugger)是 Linux 环境下功能强大的调试工具,可用于调试 C、C++ 等语言编写的程序。

1.安装gdb

在shell命令行输入

sudo apt install gdb

检验gdb是否存在

gdb --version

2.gdb的使用

这里写一个test.c,输入编译命令进入gdb

gcc -g test.c
gdb ./a.out

命令的使用

命令功能描述
l 或 list显示源代码(默认 10 行)
b <行号/函数名>在指定行号或函数入口处设置断点
r 或 run运行程序(遇到断点会暂停)
n 或 next单步执行(不进入函数内部)
s 或 step单步执行(进入函数内部)
c 或 continue继续执行(直到下一个断点或程序结束)
q 或 quit退出 GDB
p <变量名>打印变量值
bt 或 backtrace显示函数调用栈
frame <编号>切换到指定栈帧
info break查看断点信息
d <断点编号>删除指定断点
disable <断点编号>禁用断点
enable <断点编号>启用断点
watch <变量名>设置观察点(变量值变化时暂停)

r 或 run    运行程序(遇到断点会暂停)

q 或 quit    退出 GDB

l 或 list    显示源代码(默认 10 行)
b <行号/函数名>    在指定行号或函数入口处设置断点
info break    查看断点信息
n 或 next    单步执行(不进入函数内部)

p <变量名>    打印变量值

s 或 step    单步执行(进入函数内部)

gdb的小技巧

1.可以调用终端的shell命令

例如:

shell ls

2.日志功能

set logging on

当你退出后可以查看生成的gdb.txt查看gdb的使用过程

3.watchpoint

观察变量是否变化,info来查看watchpoint

调试core文件

我们先编写一个测试程序

此时运行这个程序会崩溃掉

在 Linux 下调试 core 文件是定位程序崩溃原因的关键手段,默认情况下,系统可能限制或禁用了 core 文件生成,需要先配置:

ulimit -a 命令用于显示当前用户的所有资源限制设置

临时设置

ulimit -c unlimited  # 不限制core文件大小

此时就可以生成core文件

执行

gcc -g test_err.c
gdb ./a.out

ll查看生成的core文件

注:如果临时设置了仍然不能生成core文件需要在shell命令行执行

sudo service apport stop

即可生成core文件

然后执行

gdb ./a.out core

即可调试core文件

调试正在运行的程序

先编写一个死循环的测试程序

然后执行,编译程序和让程序在后台执行

gcc -g test_for.c
./a.out &

得到进程号之后执行

sudo gdb -p <进程号>

即可调试正在运行的程序

http://www.xdnf.cn/news/6577.html

相关文章:

  • TCSVT投稿记录
  • JAVA学习-练习试用Java实现“语音识别的基础 :如使用MFCC特征提取和简单的分类器”
  • Python 类变量与实例变量完全指南:区别、使用场景及常见陷阱
  • Vue 3中ref
  • 实验6 电子邮件
  • 【Java学习笔记】【第一阶段项目实践】零钱通(面向过程版本)
  • Vue3学习(组合式API——生命周期函数基础)
  • 分类预测 | Matlab实现ABC-Transformer人工蜂群算法优化编码器多特征分类预测/故障诊断Matlab实现
  • 抢购Python代码示例与技术解析
  • 1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
  • 《模版初阶》
  • matlab多项式
  • 【unity游戏开发——编辑器扩展】EditorGUIUtility提供一些 EditorGUI 相关的其他辅助API
  • 车载诊断架构 ---车载总线对于功能寻址的处理策略
  • 北京孙河傲云源墅:限量典藏的主城墅居臻品
  • 3.3 掌握RDD分区
  • 密码学刷题小记录
  • 一物一码赋能智能制造:MES如何实现生产全流程数字化追溯
  • JAVA单元测试、反射
  • 在ubuntu系统中将vue3的打包文件dist 部署nginx 并且配置ssl证书 以https方式访问
  • 2025年5月15日
  • 广度和深度优先搜索(BFS和DFS)
  • Ubuntu20.04下如何源码编译Carla,使用UE4源码开跑,踩坑集合
  • Secs/Gem第七讲(基于secs4net项目的ChatGpt介绍)
  • 驱动-Linux定时-timer_list
  • ollama 重命名模型
  • 每日一道leetcode(新学数据结构版)
  • CISA 备考通关经验及回忆题分享
  • 1:OpenCV—图像基础
  • python打卡day26