Linux调试器-gdb的使用

在这里插入图片描述
在这里插入图片描述

.

个人主页:晓风飞
专栏:数据结构|Linux|C语言
路漫漫其修远兮,吾将上下而求索



gdb简单基础指令

gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量:打印变量值。
set var:修改变量的值
continue(或c):从当前位置开始连续而非单步执行程序
run(或r):从开始连续而非单步执行程序
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
disable breakpoints:禁用断点
enable breakpoints:启用断点
info(或i) breakpoints:参看当前设置了哪些断点
display 变量名:跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until X行号:跳至X行
breaktrace(或bt):查看各级函数调用及参数
info(i) locals:查看当前栈帧局部变量的值
quit:退出gdb

Linux调试器-gdb使用

背景

程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

调试准备工作

在这里插入图片描述

写一个简单的myprocess.c程序

在这里插入图片描述


makefile程序

在这里插入图片描述

debug 可被调试
release 不可被调试


debug模式运行

在这里插入图片描述

在debug的情况下,编译器形成可执行程序的时候,会给可执行程序添加条件信息
gcc/g++默认编译时,采用release模式
gcc/g++ 采用debug模式, - g

修改后的Makefile程序

在这里插入图片描述

这时候我们在make一下后就可以生成一个debug版的程序了

在这里插入图片描述

因为debug版本带了调试信息,所以debug版本的存储大小略微比relase大,同时因为带了调试信息,所以给用户使用的是relase版本,
输入readelf myprocess-debug就可以查看,读取elf可执行程序

在这里插入图片描述


调试(gdb)

默认gdb+要调试的 可执行程序

在这里插入图片描述

输入quit或者q退出(允许简写)

在这里插入图片描述


list

默认10行,gdb会自动记录最近执行的命令,想全部打印,直接回车
在这里插入图片描述
会把查找的位置的上下文显示出来,不是从该位置开始
在这里插入图片描述


run

要调试,首先要先把程序运行起来
输入r或者run
在这里插入图片描述
但是这会直接把程序从开头运行到结束,达不到调试的效果,我们首先要打断点
breakpoint或者简写成b 加上代码行号或者函数可以打上断点
在这里插入图片描述


info

输入info breakpoint查看断点
这里info也可以简写成i
在这里插入图片描述


delet

那么怎么删除断点呢?
通过d 后面跟对应的编号
在这里插入图片描述


disable

通过disable 编号关闭断点

在这里插入图片描述
当我们将断点关闭后,再次运行代码直接跑到了第6行,也就是编号3断点处
在这里插入图片描述


enable

通过enable 编号打开断点
在这里插入图片描述

逐过程和逐语句

逐语句会进入到函数内部调试
逐过程不会进入函数内部调试,直接到下一行


next

逐过程next
在这里插入图片描述
参考vscode编译器的F10快捷键


step

逐语句step
在这里插入图片描述

参考vscode编译器的F11快捷键
在这里插入图片描述


小结

在这里插入图片描述

相关推荐

  1. Linux调试器-gdb安装与使用

    2024-03-19 20:14:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-19 20:14:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-19 20:14:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-19 20:14:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-19 20:14:04       20 阅读

热门阅读

  1. pytorch升级打怪(四)

    2024-03-19 20:14:04       21 阅读
  2. Uni App中去掉访问路径中的#

    2024-03-19 20:14:04       22 阅读
  3. C++day6

    C++day6

    2024-03-19 20:14:04      20 阅读
  4. JDK发布信息、历史及未来规划

    2024-03-19 20:14:04       22 阅读
  5. azure databricks 常用的JDBC连接

    2024-03-19 20:14:04       21 阅读
  6. C++/C#/QT 绝对路径和相对路径设置

    2024-03-19 20:14:04       22 阅读
  7. 2024.3.19每日一题

    2024-03-19 20:14:04       23 阅读
  8. Linux重命名文件有几种方法

    2024-03-19 20:14:04       22 阅读
  9. python线程的使用和介绍

    2024-03-19 20:14:04       20 阅读
  10. Vue箭头函数还原为匿名函数示例

    2024-03-19 20:14:04       25 阅读
  11. 24.1 SpringCloud电商实战一刷

    2024-03-19 20:14:04       19 阅读
  12. @Builder用法

    2024-03-19 20:14:04       20 阅读