您的位置:首页 > 游戏 > 游戏 > 设计师互联网_云浮疫情最新消息_网站怎么优化推荐_品牌营销做得好的品牌有哪些

设计师互联网_云浮疫情最新消息_网站怎么优化推荐_品牌营销做得好的品牌有哪些

2025/2/13 15:56:23 来源:https://blog.csdn.net/qq_34430371/article/details/143199421  浏览:    关键词:设计师互联网_云浮疫情最新消息_网站怎么优化推荐_品牌营销做得好的品牌有哪些
设计师互联网_云浮疫情最新消息_网站怎么优化推荐_品牌营销做得好的品牌有哪些

在这里插入图片描述

笔者来聊一下对于GDB的一些操作使用认识。

1、GDB的使用以及用途

GDB是GNU的一个项目,具体网站如下,网址:https://www.gnu.org/software/gdb/

  • 支持多种语言,常用的就是C/C++/Python等等
  • 跨平台使用,Linux/windows/MacOS,当然也可以交叉编译,到其他目标平台上面,

在这里插入图片描述
例如:aarch64-linux-gnu-gcc 编译器,是有host x86_64 平台编译出 target是aarch64_linux_gnu的
在这里插入图片描述

2、GDB的安装环境

2.3 Linux安装

(1) sudo apt-get install gdb
(2)下载:http://ftp.gnu.org/gnu/gdb/特定版本源码,然后解压,然后编译出可执行文件。
在这里插入图片描述
在这里插入图片描述

2.4 Windows安装

(1)下载MinGW (SourceCode)https://sourceforge.net/projects/mingw-w64/files/latest/download
Minimalist GNU for windows :一套GNU工具,window下的GNU工作环境
(2)在这里插入图片描述

(3)

  • Architecture:
    i386/i586/i686:不同时期的CPU/ 32位
    x86_84:x(3/4/5/6)86版本 /64位
  • Threads:线程采用POSIX还是win32
    POSIX:可移植操作系统接口(API)C11标准
    WIN32:win32 API接口
  • Exception:异常处理模型
    seh:新发明、不支持32、性能较好
    siji:古老但支持32

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)环境变量 PATH
(5)测试环境是否OK
在这里插入图片描述
在这里插入图片描述

3、GDB的调试原理以及方式

3.1 调试原理

GDB的主要调试原理可参考这篇文章:https://mp.weixin.qq.com/s/_GdfCo9PuOK4bROSxiwM_A

  • 通过系统调用,Ptrace函数,可以实现主进程和子进程的通信与控制
    在这里插入图片描述
    1、父进程观察和控制子进程的运行(gdb接管运行程序)
    2、检查和改变其寄存器等信息
    3、建立在信号基础上,用来断点调试和系统跟踪

  • 函数参数
    1、request 执行的指令 2、pid 跟踪的进程
    3、addr 监控的内存地址 4、data 读取或者写入的数据

  • enum __ptrace_request request(建立父子进程关系)
    1、 PTRACE_TRACEME
    gdb 先fork子进程 ,子进程调用ptrace、运行用户程序 、父子进程通过信号进行交互。
    2、 PTRACE_ATTACH:attach pid
    使得进程号pid的进程成为gdb的子进程。
    3、 PTRACE_CONT
    进行运行之前停止的子进程。

3.2 调试方式

三种方式:注意使用的时候,需要增加-g 选项

  • gdb 运行程序,例如:gdb main.exe 或者 gdb --args 0x1 main.exe
    在这里插入图片描述
    在这里插入图片描述

  • gdb attach pid,如下图
    在这里插入图片描述
    在这里插入图片描述

  • gdb 与 gdb server
    宿主机运行:gdb + 可执行文件
    在这里插入图片描述
    连接目标机: target remote 192.168.0.138:6322
    在这里插入图片描述

目标机器运行:gdbserver ip:端口 + 可可执行文件
在这里插入图片描述
具体可以参考这篇文章Eclipse 远程Debug调试C程序

4、GDB的调试指令

在这里插入图片描述

  • list指令
    用法: list 文件名:行号 或者list 函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • break指令
    1、b file:行号 在指定文件的行号出设置断点。
    2、b file:函数 在文件指定函数的入口处停止
    在这里插入图片描述
    在这里插入图片描述

  • delete指令
    1、delte 断点号/断点号集合
    在这里插入图片描述

  • clear指令
    1、clear+函数/clear+函数:行号
    在这里插入图片描述

  • run指令
    执行程序,遇到断点会停止、否则一直运行到程序结束
    在这里插入图片描述

  • continue指令
    继续运行程序
    在这里插入图片描述

  • next指令
    单步跳过,输入n指令后,enter建可以一直单步
    在这里插入图片描述

  • step执行
    单步执行
    在这里插入图片描述

  • Print (格式) 变量名
    1、常规类型(int/char/float)
    2、结构体类型数值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • Set 变量名 = 数值
    在这里插入图片描述

  • watch 变量/表达式
    1、数据断点
    2、条件断点
    高效调试,非常重要
    例如:
    1、watch test_data_g
    2、Watch test_data_g.value1
    3、watch test_data_g->value3 if test_data_g->value3>2
    在这里插入图片描述
    在这里插入图片描述

  • Examine
    格式:x /FMT address,打印固定格式数据,例如16进制数据
    例如: x /16x 0x191f5f0,以hex形式打印16个从0x191f5f0开始的数据
    在这里插入图片描述

  • Info 指令
    格式:info 功能 参数
    例如:info reg eax
    1、局部/全局变量
    2、寄存器
    3、断点
    4、函数
    5、……

  • thread 指令
    1、info thread:查看所有线程
    2、thread 线程id:切换到对应线程
    在这里插入图片描述
    在这里插入图片描述

  • 显示调用栈指令
    一、backtrace(bt)(±n)栈顶栈底
    显示所有栈内容
    在这里插入图片描述
    二、down (n)
    表示往栈顶方向下移 n 层
    ( n >0,默认值为 1),并打印出栈信息。
    三、up (n)
    up n 命令表示往栈底方向上移 n 层
    ,并打印出栈信息

5、GDB离线调试core文件

5.1 运行生成core文件

ulimit -c unlimited

5.2 设置core文件路径

[root@iZuf6f8d9q28dk29pfvn1nZ ~]# echo “core” > /proc/sys/kernel/core_pattern

5.3 生成core文件

如果发现有coredumpd 的情况,则会有文件生成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4 离线调试core文件

gdb + 可执行文件+ core文件
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com