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

Linux--gdb/cgdb

ok,我们今天学习gdb的安装和使用

调试器-gdb/cgdb使用

VS、VScode编写的代码一般都是release格式的,gdb 的格式一般是debug

换成debug模式命令 :-g

gdb会记录最新的一条命令,直接回车就是默认执行该命令

一个调试周期下,断点编号递增,删除断点,之后的断点编号也是递增

样例代码

 // mycmd.c
 #include <stdio.h>
 int Sum(int s, int e)
 {
 int result = 0;
     for(int i = s; i <= e; i++)
     {
         result += i;
     }
         return result;
 }
 int main()
 {
     int start = 1;
     int end = 100;
     printf("I will begin\n");
     int n = Sum(start, end);
     printf("running done, result is: [%d-%d]=%d\n", start, end, n);
     return 0;
 }

预备

程序的发布⽅式有两种,debug 模式和 release 模式, Linux gcc/g++ 出来的⼆进制程序,默认是

release 模式。

VS、VScode编写的代码一般都是release格式的,gdb 的格式一般是debug

换成debug模式命令 :-g

要使⽤gdb调试,必须在源代码⽣成⼆进制程序的时候,加上 -g 选项,如果没有添加,程序⽆法被编译

$ 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 binFile
  • 退出: ctrl + d 或 命令 quit 调试命令

gdb会记录最新的一条命令,直接回车就是默认执行该命令

一个调试周期下,断点编号递增,删除断点,之后的断点编号也是递增

命令作用样例
list / l

显示源代码,从上次位置开始,每次列出

10
list / l 10
list / l  函数名列出指定函数的源代码list / l main
list / l     文件名: 行号列出指定文件的源代码list / l mycmd. c : 1
r / run从程序开始连续执行run
n / next单步执行,不进入函数内部next
s / step单步执行,进入函数内部step
break / b  [文件名:] 行号在指定行号设置断点

break 10

break test. c:10
break / b 函数名在函数开头设置断点break main
info break / b查看当前所有断点的信息info break
finish执行到当前函数返回,然后停止finish
print / p 表达式打印表达式的值print start + end
p 变量打印指定变量的值p x
set var   变量=值修改变量的值set var i=10
continue / c从当前位置开始连续执行程序continue

delete / d

breakpoints
删除所有断点delete breakpoints

delete / d

breakpoints n
删除序号为n的断点delete breakpoints 1
disable breakpoints禁用所有断点disable breakpoints
enable breakpoints启用所有断点enable breakpoints
info / i breakpoints查看当前设置的断点列表info breakpoints
display 变量名跟踪显示指定变量的值 (每次停止时)display x
undisplay 编号取消对指定编号的变量的跟踪显示undisplay 1
until X 行号执行到指定行号until 20
backtrace / bt查看当前执行栈的各级函数调用及参数backtrace
info / i locals查看当前栈帧的局部变量值info locals
quit退出GDB调试器quit

 

断点 + finish + until + c:快速定位问题

如果想看到代码调试,可以使用cgdb

下载代码:

sudo yum install -y cgdb

少年没有乌托邦,心向远方自明朗!

如果这个博客对你有帮助,给博主一个免费的点赞就是最大的帮助
欢迎各位点赞,收藏和关注哦
如果有疑问或有不同见解,欢迎在评论区留言
后续会继续更新大连理工大学相关课程和有关Linux的内容和示例
点赞加关注,学习不迷路,好,本次的学习就到这里啦!!!

ok,我们下次再见!

相关文章:

  • 【Go】Go MongoDB 快速入门
  • 使用 pytesseract 进行 OCR 识别:以固定区域经纬度提取为例
  • 过滤器(Filter)与拦截器(Interceptor)
  • Flutter 学习之旅 之 flutter 使用 shared_preferences 实现简单的数据本地化保存封装
  • MySQL 深度分页如何优化?
  • 【Unity6打包Android】游戏启动的隐私政策弹窗(报错处理)
  • 从硬件定时器原理学会多任务调度
  • 筛选法找质数(信息学奥赛一本通-2040)
  • 陶陶摘苹果(信息学奥赛一本通-1103)
  • 46. HarmonyOS NEXT 登录模块开发教程(一):模态窗口登录概述
  • 操作系统高频面试题
  • 机器学习模型-从线性回归到神经网络
  • LuaJIT 学习(2)—— 使用 FFI 库的几个例子
  • 密码学研究热点
  • 城市客运安全员适合哪几类人报考
  • Vue中有什么组件可以实现轮播效果,每次出现四个元素?
  • 信号处理抽取多项滤波的数学推导与仿真
  • 【蓝桥杯速成】| 2.逆向思维
  • 【openGauss】物理备份恢复
  • C++28--特殊类设计
  • 围绕加快科创中心建设,上海市委中心组学习会听取专题辅导报告
  • 小马智行一季度营收增12%:Robotaxi收入增长两倍,预计车队规模年底到千台
  • 重庆对外经贸学院通报:一学生在体育课后不慎坠入化粪池,不幸遇难
  • 新华每日电讯:把纪律的螺丝拧得紧而又紧
  • 长沙至赣州高铁初步设计获批,可填补湘赣两省斜向交通空白
  • 建筑瞭望|从黄浦江畔趸船改造看航运设施的升级与利用