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

09Linux GDB学习笔记

Linux GDB使用

目录

文章目录

  • Linux GDB使用
    • 先编译文件
    • 1.检查安装
      • 1.1 安装GDB
    • 2.启动GDB
    • 3.退出GDB
    • 4.设置断点
      • 4.1 在指定行号处设置断点
      • 4.2 在指定函数名处设置断点
      • 4.3 在指定源文件和行号处设置断点
    • 4.4查看断点信息
    • 4.5删除断点
    • 5.运行
      • 5.1 <font color=#ff0000>逐过程:遇到函数调用时不会进入函数内部。
      • 5.2 <font color=#ff0000>逐语句:遇到函数调用时会进入函数内
    • 6.查看和修改变量
    • 7.查看函数调用栈
    • 7.查看源码和行号
    • 8.打印变量的的值
    • 多线程调试(待)
    • 设置线程锁(待)
    • 9.总命令表

先编译文件

-g:包含调试信息
-o:控制优化级别

请添加图片描述

1.检查安装

gdb --version
请添加图片描述

1.1 安装GDB

sudo apt-get install gdb

2.启动GDB

直接调试目标程序:gdb ./hello_server
附加到进程ID:gdb attach pid
调试core文件:gdb filename corename

3.退出GDB

命令:q 然后回车 或者 Ctrl + d 

4.设置断点

4.1 在指定行号处设置断点

b + 行号

4.2 在指定函数名处设置断点

b 源文件:函数名

4.3 在指定源文件和行号处设置断点

b 源文件:行号

4.4查看断点信息

info b

4.5删除断点

清除某个断点 (gdb) delete 4
清除所有断点 (gdb) delete 

请添加图片描述

请添加图片描述

5.运行

有断点运行到断点
r

5.1 逐过程:遇到函数调用时不会进入函数内部。

n

5.2 逐语句:遇到函数调用时会进入函数内

s

6.查看和修改变量

打印变量值:p 变量名
修改变量值:set var 变量名 = 新值
追踪变量:display 变量名,会在每次程序停止时显示变量值。
取消追踪:undisplay 变量名编号

7.查看函数调用栈

bt
鄙人样例
请添加图片描述设置断点
请添加图片描述
#0 表示最内层的函数调用
#1
#2
#3 表示 Init_ShellState的调用,它在 main.c调用。
#4 表示 main 函数的调用,它是程序的入口点
请添加图片描述

7.查看源码和行号

l

8.打印变量的的值

p 变量名

请添加图片描述

多线程调试(待)

查看线程信息:info thread
切换线程:thread 线程编号
对指定线程执行命令:thread apply 线程编号 command

设置线程锁(待)

锁定线程:set scheduler-locking on
解锁线程:set scheduler-locking off
单步执行时锁定线程:set scheduler-locking step

9.总命令表

ctrl + d 或 quit 调试命令	gdb binFile 退出
list( l )  行号	显示binFile源代码,接着上次的位置往下列,每次列10行。
list( l ) 函数名	列出某个函数的源代码。
run( r )	运行程序。
next( n )	单条执行。
step( s )	进入函数体调用
break(b) 行号	在某一行设置断点
break(b) 函数名	在某个函数开头设置断点
info break( b )	查看断点信息。
finish	执行到当前函数返回,然后停下来等待命令
print( p ) 	打印表达式的值,通过表达式可以修改变量的值或者调用函数
p 变量	打印变量值(显示一次)。
set var	修改变量的值
continue( c )	从当前位置开始连续而非单步执行程序
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的详细教程【纯命令行调试】]https://blog.csdn.net/Fire_Cloud_1/article/details/129213449
请添加图片描述听歌曲看图,意想不到
希望今日工作/学习的你也能get到我的快乐…
请添加图片描述

参考文献:感谢!!
https://blog.csdn.net/lovely_dzh/article/details/109160337

相关文章:

  • ctfshow jwt web入门
  • 【前端】vue+element项目中select下拉框label想要显示多个值多个字段
  • 自然语言处理(NLP)—— 神经网络语言处理
  • NPN与PNP的基础知识介绍
  • 使用git将本地文件上传到仓库+git常用指令
  • 二、Nginx目录结构与基本运行原理
  • SpringBoot:手动创建应用
  • 探索安全之道 | 企业漏洞管理:从理念到行动
  • 【ES001】elasticsearch实战经验总结(最近更新中)
  • Linux - 磁盘的分区和挂载
  • 操作系统基础知识
  • C语言面试题11至20题
  • 冶金比例换向阀放大器
  • 【TB作品】msp430f5529单片机,dht22,烟雾传感器
  • JVM之【GC-可达性分析算法】
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 聊聊directory traversal attack
  • 前端_面试
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用Gradle第一次构建Java程序
  • 使用putty远程连接linux
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 在Unity中实现一个简单的消息管理器
  • 找一份好的前端工作,起点很重要
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Python 3 新特性:类型注解
  • #《AI中文版》V3 第 1 章 概述
  • #QT(串口助手-界面)
  • #Ubuntu(修改root信息)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (3)nginx 配置(nginx.conf)
  • (day 12)JavaScript学习笔记(数组3)
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)SvelteKit教程:layout 文件
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **PHP分步表单提交思路(分页表单提交)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net MVC + EF搭建学生管理系统
  • .考试倒计时43天!来提分啦!
  • @Transactional 竟也能解决分布式事务?
  • @我的前任是个极品 微博分析
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [20150321]索引空块的问题.txt
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [Cesium学习]
  • [Go 微服务] Kratos 验证码业务
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [LeetCode]Balanced Binary Tree
  • [Linux版本Debian系统]安装cuda 和对应的cudnn以cuda 12.0为例
  • [Python进阶] 消息框、弹窗:pywin32