gdb调试

        本文主要探讨gdb调试。

传入启动参数

gdb <exe>
set args <args>
r

调试运行进程

gdb <exe> + gdb attach <pid> 或 gdb --pid <pid>

detach         分离调试
q                  退出调试
n                  单步跳过
s                  单步跳入
finish            退出当前函数

进入程序若r会杀死运行的程序,设置断点即可单步调试

断点
b file:line                文件某行加断点
b function               函数加断点
rb str                      包含str的函数名加断点
b bp condition        条件断点(条件满足断点生效)
tb bp                      设置临时断点
i bp                         查看断点信息
disable b_num       禁止断点
enable  b_num       使能断点
d       b_num           删除断点

变量
i args                                  查看变量  
p arg_name                        查看变量
p arg_name = val               设置变量值
set print null-stop               设置字符串显示
set print pretty                    设置结构体显示
set print array on                设置数组显示
sizeof,strlen,strcmp            内嵌函数
whatis var                           查看变量或函数类型
ptype /r /o /m /t                   查看变量或函数类型
/r:                                     显示typedef定义
/m:                                   不显示类方法
/M:                                   只显示类的方法
/t:                                     不显示类typedef
/o:                                    字段偏移量和大小
i variables var                     显示变量名关键字定义文件
set print object on 显          示输出虚方法调用

内存
x /<n><fromat> address     n地址个数 fromat显示方式
x /s   addr_val                     字符串显示地址中的值
x /d   addr_val                     十进制显示地址中的值
x /x   addr_val                     十六进制显示地址中的值
x /c   addr_val                      单字符串显示地址中的值
x /8d  addr_val                     显示addr_val起始的8个地址值,十进制方式显示

寄存器
i r                               显示所有寄存器
i r rai                          显示rdi寄存器
p $rip =  addr             跳转执行
set var $pc = addr      跳转执行

函数传参依次存储的寄存器:rdi,rsi,rdx,rcx,r8,r9
     
源码

set listsize num        设置显示行数
l function                  查看指定函数周围代码
l file:num                  查看文件行周围代码
search str                 搜索含str的行
forward-search str    前项搜索
reverse-search str    后项搜索
directory path            设置源代目录

调用栈
bt                    查看栈信息
f num               切换栈帧
info f nnum      查看指定栈帧详细信息


线程
i thread                                        显示线程信息
t num                                           切换线程
t f   str                                          查找含str的线程
t     name                                     设置线程名
b  thread num                              为线程设置断点
thread apply num.. command      为多(一)个线程执行gdb命令 
set print thread-events on|off       设置线程日志
show print thread-events              显示线程日志状态

jump
j function/line        

跳转到指定行或函数定义处
跳转到指定位置执行,执行中存在断点则中断,无则继续执行
跳转不会更改堆栈帧和寄存器

skip(不参与调试,忽略,直接运行)
skip function             跳过函数
skip file filename       跳过文件
skip -gfi filename/*    跳过文件

函数调用
call function(argv)    调用函数
p function(argv)        调用函数并显示结果 

观察点(断点)
观察点是变量/表达式,执行过程中中断打印
watch                                    写观察点
rwatch                                   读观察点
awtach                                   读写断点
i watch                                   显示观察点
delete/disable/enable num     删除/禁用/启用观察点

捕获
catch catch 捕捉catch
catch throw 捕捉throw
tatch catch  只捕获一次

堆栈溢出
call malloc_stats()              查看堆栈调用状态
call malloc_info(0,stdout)   查看堆栈调用状态
-fsanitize=address              编译选项,程序运行时检测到内存错误输出

core dump
某时刻(存活或崩溃)进程内存信息映射(内存信息,寄存器等信息)

gdb --pid  num <exe> + generate-core-file   生成core dump文件


ulimit -c                                        设置core文件大小
/proc/sys/kernel/core_pattern       设置core文件名称


反向调试
record                  打开记录

record stop             关闭记录
rn
rc
reverse-finish

制作发行版

gcc test.c -g -o test && strip test

strip去除符号表不能单独用于调试

进程
set follow-fork-mode child      调试子进程
set detach-on-fork off             调试父子进程
i inferiors                                 显示进程信息
inferior 2                                 切换进程
detach inferior 1
add-inferior <xe>                    添加新的调试进程
remove-inferiors num              删除inferior,运行的不能删除
clone-inferior num                   复制ninferior
detach inferior num                 分离inferior,还可启动
kill inferior num                        kill掉inferior,还可启动


调试窗口
layout src                    显示源码窗口
layour asm                  显示汇编窗口
layout reg                    显示寄存器窗口
layout split                   切分窗口
focus src/asm/reg        切换窗口交点
iwin                              查看当前拥有交点的窗口
ctrl+x+a                        退出窗口模式

SHELL命令
!  comman                     执行shell命令
set logging on/off             启用/禁用结果输出
set logging file                  设置输出文件
set logging overwrite        覆盖输出文件,默认为追加


断点执行命令
commands num                num断点号,添加命令              
cmd
cmd
end
save breakpoints filename     保存断定文件
source filename                      读取断定文件
commands num                      num断点号,删除命令
end

补丁/破解
gdb --write <exe>                    修改指定地址处值,永久生效
disassemble /mr function        将函数源码与汇编指令对应显示

0x0000000000001346 <+125>:   83 c0 01        add    $0x1,%eax
set {unsigned char[3]}0x00000000000012f0 = {0x83, 0xc0, 0x11}
0x00000000000012f0 <+39>:    83 c0 11        add    $0x11,%eax

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43081.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher

目录 5.3 附加参数法&#xff1a;T-Patcher5.3.1 补丁的位置1&#xff09;键值存储体2&#xff09;补丁设计 5.3.2 补丁的形式5.3.3 补丁的实现1&#xff09;准确性2&#xff09;局部性 5.3 附加参数法&#xff1a;T-Patcher 附加参数法&#xff1a;通过引入可训练的额外参数实…

【原理系列】计算机组成原理-第一遍阅读总结

目录 创作灵感&#xff1a; 总览&#xff1a; 1、计算机抽象与技术 2、ISA指令集架构 3、CPU处理器 4、存储器 创作灵感&#xff1a; 夯实计算机原理&#xff0c;构建知识框架 此系列将总结和记录我对 【深入浅出计算机组成原理-台湾科技大学/元智大学的刘一宇教授】 的…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

C++运算符重载、类的转换构造函数和类型转换函数的基础练习

练习1&#xff1a;&#xff08;困难&#xff09; 建立一个矩阵类&#xff0c;可以完成指定的操作或运算。 说明&#xff1a; &#xff08;1&#xff09;、矩阵为2行3列&#xff0c;基类型为整型&#xff1b; &#xff08;2&#xff09;、操作或运算&#xff1a;初始化&…

PERL开发环境搭建>>Windows,Linux,Mac OS

特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…

docker(2) -- 启动后修改目录和网络

1. 前言 docker启动前是image文件&#xff0c;启动后是container文件&#xff0c;启动的时候我们可以指定容器的挂载目录以及网络类型&#xff0c;但启动后&#xff0c;这些信息都以配置文件的形式保存在container中&#xff0c;container重新启动时无法重新指定这些信息&…

Flutter开发中如何避免UI显示溢出的问题

文章目录 1. 使用灵活的布局组件2. 允许内容滚动3. 处理文本溢出4. 检查父容器约束5. 使用自适应布局6. 调试工具7. 其他技巧总结 在 Flutter 开发中&#xff0c;UI 溢出&#xff08;如 A RenderFlex overflowed 错误&#xff09;通常是由于布局空间不足或子组件尺寸超出父容器…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升级版本&#xff0c;今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表&#xff0c;组织表的字段…

【力扣刷题|第十七天】0-1 背包 完全背包

目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S&#xff0c;数组和为N&#xff0c;目标值为T&#xff0c;那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数&#xff0c;而且NT也为偶数&#xff0c;那么第一个判断条件我们就有了&…

深入浅出 Embedding

1. 什么是 Embedding? Embedding(嵌入)是一种将高维数据映射到低维连续空间的技术,用于表达数据的语义关系。简单来说,它是一种向量化表示,将文本、图像、用户行为等信息转换为数值向量,使得相似的数据在向量空间中距离更近。 2. 如何理解 Embedding? 2.1 浅显易懂的…

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建,Fabric 模组详细搭建教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft Fabric 服务器搭建&#xff0c;Fabric 模组详细搭建教程 一、 服务器介绍二、安装 JDK 21三、搭建 Minecraft 服务端四、本地测试连接五、如何添加模组&#xff08;mods&#xff09;六、添加服务&#xff0c;并设置开…

【MLP-BEV(10)】BEVPooling V1和BEVPooling V2的view_transformer,进行鱼眼图片实践

文章目录 先说说 BEVPoolv1步骤1:3D点生成步骤2 2D特征采样和BEV特征生成特点再谈谈BEVPoolv2步骤1:3D点生成步骤2: 计算索引关系步骤3: `voxel_pooling`计算鱼眼图片进行实践步骤1、3D点生成(基于Kannala-Brandt 进行调整)步骤2、2D特征采样和BEV特征生成(1) 体素化 (Voxe…

鸿蒙项目源码-天气预报app-原创!原创!原创!

鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品…

告别桌面杂乱与充电焦虑,移速165W百变桌面充电站首发体验

告别桌面杂乱与充电焦虑&#xff0c;移速165W百变桌面充电站首发体验 哈喽小伙伴们好&#xff0c;我是Stark-C~ 先如今&#xff0c;家里的电子产品越来越多&#xff0c;手机、平板、电脑三件套已经是基础配置&#xff0c;还有相机、Switch、智能手表等&#xff0c;这些产品用…

skill插件教程——skill程序的组成以及调用方法

skill程序的基本组成 1、基础的程序文件 插件运行的基础——就是你写程序的文件&#xff0c;格式为il文件&#xff0c;就是文本文件格式 2、调用程序的文件——allegro.ilint 文件申明在那个位置——在这个文件夹下&#xff0c;写入你调用的函数。 例如load&#xff08;“…

解决Dubbo3调用Springcloud接口报No provider available from registry RegistryDirectory

解决Dubbo调用Springcloud接口报No provider available from registry RegistryDirectory 问题发现问题解决 问题发现 在学习Dubbo过程中&#xff0c;Dubbo官网有一篇文章《微服务最佳实践&#xff0c;零改造实现 Spring Cloud & Apache Dubbo 互通》&#xff0c;跟着示例…

基于RFID技术建筑物资材料智能管理解决方案

建筑行业仓库和物资材料管理面临诸多挑战&#xff0c;如工程设备重复利用的管理需求、物资出入库管理不规范、账物不符、物资丢失等问题。特别是在复杂多变的工地环境中&#xff0c;对物资进行科学规范的管理难度极大。上海岳冉基于RFID技术的建筑物资材料智能管理解决方案聚焦…

WSL系统找不到指定的文件

问题介绍 在尝试使用linux子系统时&#xff0c;发现无法打开 在尝试使用docker时无法使用 在命令行cmd或者powershell使用wls相关命令时&#xff0c;报错 相关错误提示均为&#xff1a; 系统找不到指定的文件 解决方法 试了各种方法无效。 直接到github下载最新版的wsl安装…

海量数据处理

1.海量数据处理问题 给两个文件&#xff0c;分别有100亿个query&#xff0c;只有1G内存&#xff0c;如何找到两个文件交集&#xff1f; 解决方案一&#xff1a; 可以先用布隆过滤器&#xff0c;一个文件的query放进布隆过滤器&#xff0c;另一个文件依次查找&#xff0c;在的…

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和高性能计算&#xff08;HPC&#xff09;应用的快速发展&#xff0c;对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计&#xff0c;以满足这些严格…