GDB命令全量版

news/2024/9/8 6:00:41/文章来源:https://www.cnblogs.com/cuidexu/p/18326694
gcc -g -o 生成可执行文件
-gstabs 关闭编译优化
gdb 执行gdb
gdb core 同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件
gdb 指定这个服务程序运行时的进程ID, gdb会自动attach上去,并调试他
-s 从指定文件中读取符号表
-se 从指定文件中读取符号表信息,并把他用在可执行文件中
-c 调试时core dump的core文件
-d 加入一个原文件的搜索路径,默认搜索路径是环境变量中PATH所定义的路径
help 查看某种类的命令帮助
shell 使用UNIX的shell命令
make 重新build自己的程序
【enter】 直接回车,重复上一行命令
start 运行程序,执行到主程序入口
r/run 运行程序
c/continue [ignore-count] 继续执行程序,知道下一断点或程序结束. ignore-count表示忽略其后的断点次数
finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息
s/step [count] 单步进入被编译有debug信息的函数. [count]表示执行后面的count条指令,然后再停住
set step-mode on set step-mode off 打开、关闭step-mode模式。程序不会因为没有debug信息而不停住
u/until 运行程序直到退出循环体
n/next [count] 单步跳过.[count]表示执行后面的count条指令,然后再停住
si/stepi 单步执行汇编代码,执行完命令,打出程序代码的同时会打出机器指令
ni/nexti 单步跳过汇编代码,执行完命令,打出程序代码的同时会打出机器指令
l/list 显示当前行后面的源程序
l/list - 显示当前行前面的源程序
l/list + 显示当前行后面的源程序
l/list , 显示从first行到last行之间的源代码
l/list , 显示从当前行到last行之间的源代码
l/list 显示程序第linenum行的周围的源程序
l/list 显示函数名为function的函数的源程序
set listsize 设置一次显示的源代码行数
show listsize 查看当前的listsize的设置
p/print p/print / 打印变量 是输出的格式
x/<n/f/u> 查看内存的值。n 是一个正整数,表示显示内存的长度;f 表示显示的格式;u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes;表示一个内存地址。
b 指定行打断点
b 指定文件和行打断点
b 执行函数入口打断点
b *
在程序运行的内存地址处打断点
b + b - 在当前行号的前面或后面的offset行打断点。offset为自然数
b 下一条指令处打断点
b if 指定条件下断点
i/info b/break [n] 查看断点信息, n为断点号
bt/backtrace 查看调用栈
bt bt <-n> n是一个正整数,表示只打印栈顶上n层的栈信息。 -n表一个负整数,表示只打印栈底下n层的栈信息
f/frame 切换当前栈,n是栈中的层编号。frame 0,表示栈顶,frame 1,表示栈的第二层。
up down 表示向栈的上面移动n层,可以不打n,表示向上移动一层。 表示向栈的下面移动n层,可以不打n,表示向下移动一层。
select-frame up-silently down-silently 对应于 frame 命令。 对应于 up 命令。 对应于 down 命令。不打出栈层信息
frame/f 查看当前栈层信息。 会打印出这些信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。
info frame/f 打印出更为详细的当前栈层的信息,只不过,大多数都是运行时的内内地址。
info args 打印当前函数的参数名及其值
info locals 打印当前函数中所有的局部变量
info catch 打印当前函数中的异常处理信息
watch 为表达式(变量)设置观察点。一旦值有变化,马上停住程序
rwatch 当表达式(变量)被读时,停止程序
awatch 当表达式(变量)的值被读或写时,停止程序
info watchpoints 列出当前所设置的所有观察点
catch 当event发生时,停止程序。
BreakPoint WatchPoint CatchPoint 断点 观察点 捕捉点 统称为停止点
delete、clear、disable、enable 维护停止点
clear 清除所有已定义的停止点
clear clear filename:function 清除所有设置在函数上的停止点
clear clear filename:linenum 清除所有设置在指定行上的停止点
d/delete [breakpoints][range…] 删除指定断点,breakpoints为断点号。如果不指定断点号,表示删除所有的断点。 range表示断点号的范围(如:3-7)。
dis/disable [breakpoints][range…] 禁用指定断点,如果什么都不指定,表示disable所有的停止点
enable [breakpoints][range…] 激活所指定停止点。
enable [breakpoints] once [range…] 激活所指定的停止点一次,当程序停止后,该停止点马上被GDB自动disable
enable [breakpoints] delete [range…] 激活所指定的停止点一次,当程序停止后,该停止点马上被GDB自动delete
condition 修改断点号为bnum的停止条件为expression
condition 清除断点号为bnum的停止条件
ignore 表示忽略断点号为bnum的停止条件count次
commands [bnum] … command-list… end 使用GDB提供的command命令来设置停止点的运行命令。也就是说,当运行的程序在被停止住时, 我们可以让其 自动运行一些别的命令,这很有利行自动化调试. 为断点号bnum指写一个命令列表。当程序被该断点停住时,gdb会依次运行命令列表中的命令
commands end 清除commands命令
handle 在GDB中定义一个信号处理。
i/info signals i/info handle 查看有哪些信号在被GDB检测中。
break thread break thread if ... linespec指定了断点设置在的源程序的行号。 threadno指定了线程的ID,注意,这个ID是GDB分配的,你可以通过“info threads”命令来查看正在运行程序中的线程信息。 如果你不指定thread 则表示你的断点设在所有线程上面。你还可以为某线程指定断点条件。
forward-search search 向前搜索源代码
reverse-search 全部搜索,就是正则表达式,也主一个字符串的匹配模式
dir/directory <dirname…> 加一个源文件路径到当前路径的前面
directory 清除所有的自定义的源文件搜索路径信息
show directories 显示定义了的源文件搜索路径
info line 查看源代码在内存中的地址。info line后面可以跟“行号”,“函数名”,“文件名:行 号”,“文件名:函数名”,这个命令会打印出所指定的源码在运行时的内存地址
disassemble func 查看源程序的当前执行时的机器码
@ 是一个和数组有关的操作符。“@”的左边是第一个内存的地址的值,“@”的右边则你你想查看内存的长度
:: 指定一个在文件或是一个函数中的变量
{} 表示一个指向内存地址的类型为tpye的一个对象
display expr是一个表达式,fmt表示显示的格式,addr表示内存地址,当你用display设定好了一个或多个表达式后,只要你的 程序被停下来,GDB会自动显示你所设置的这些表达式的值。
display/i $pc 格式i和s同样被display支持;$pc是GDB的环境变量,表示着指令的地址,/i则表示输出格式为机器指令码,也就是汇编。于是当程序停下后,就会出 现源代码和机器指令码相对应的情形,这是一个很有意思的功能。
undisplay <dnums...> delete display <dnums...> 删除自动显示,dnums意为所设置好了的自动显式的编号。如果要同时删除几个,编号可以用空格分隔,如果要删除一个 范围内的编号,可以用减号表示(如:2-5)
disable display <dnums...> enable display <dnums...> disable和enalbe不删除自动显示的设置,而只是让其失效和恢复。
info display 查看display设置的自动显示的信息
set print address set print address on set print address off 打开、关闭地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的
show print address 查看当前地址显示选项是否打开
set print elements 这个选项主要是设置数组的,如果你的数组太大了,那么就可以指定一个来指定数据显示的最大 长度,当到达这个长度时,GDB就不再往下显示了。如果设置为0,则表示不限制。
show print elements 查看print elements的选项信息。
set print null-stop <on/off> 如果打开了这个选项,那么当显示字符串时,遇到结束符则停止显示。这个选项默认为off
set print pretty on 如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。
show print pretty 查看GDB是如何显示结构体的。
set print sevenbit-strings <on/off> 设置字符显示,是否按“nnn”的格式显示,如果打开,则字符串或字符数据按nnn显示,如“65”。
show print sevenbit-strings 查看字符显示开关是否打开。
set print union <on/off> 设置显示结构体时,是否显式其内的联合体数据
show print union 查看联合体数据的显示方式
$1, $2,$3 历史记录
set $foo = *object_ptr 设置环境变量
show convenience 查看当前所设置的所有的环境变量。
set $i = 0 print bar[$i++]->contents 这是一个比较强大的功能,环境变量和程序变量的交互使用,将使得程序调试更为灵活便捷 于是,当你就不必,print bar[0]->contents, print bar[1]->contents地输入命令了。输入这样的命令后,只用敲回 车,重复执行上一条语句,环境变量会自动累加,从而完成逐个输出的功能
info registers 查看寄存器的情况,除了浮点寄存器
info all-registers 查看所有寄存器的情况,除了浮点寄存器
info registers 查看所指定的寄存器的情况
jump 指定下一条语句的运行点。可以是文件的行号,可以是file:line格式,可以是+num这种偏移量格式
jump
address是代码行的内存地址
set $pc=0x485 程序运行时,有一个寄存器用于保存当前代码所在的内存地址。所以,jump命令也就是改变了这 个寄存器中的值。于是,你可以使用“set $pc”来更改跳转执行的地址。
signal 产生信号量 UNIX的系统信号量通常从1到15。所以取值也在这个范围。 single命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由GDB截获的,而single命令所发出一 信号则是直接发给被调试程序的。
return 还没有执行的语句并强制返回 取消当前函数的执行,并立即返回,如果指定了,那么该表达式的值会被认作函数的返回值
call 强制调用函数。表达式中可以是一个函数,以此达到强制调用函数的目的。并显示函数返回值。如果函数返回值是void,那么就不显 示。
print print后面跟表达式,也可以用来调用函数,print和call不同的是,如果函数返回void。call则不显示,print则显示函数返回值,并把该值存入历史数据中。
show language 查看当前的语言环境,C语言被认为是默认的环境。
info frame 查看当前函数的程序语言
info source 查看当前文件的程序语言

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

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

相关文章

GDB详解

GDB简介 GDB(GNU Debugger)是Linux下一款C/C++程序调试工具,通过在命令行中执行相应的命令实现程序的调试,使用GDB时只需要在shell中输入gdb命令或gdb filename(filename为可执行程序文件名)即可进入GDB调试环境。 GDB主要有以下功能:设置断点 单步调试 查看变量的值 动态…

从零开始搭建博客系列-终

结束,也是新的开始。结束,也是新的开始。 ‍ 不知不觉也写了接近 30 篇博客了,也帮助到了很多人,甚是欣慰。 本文就做一个小结吧 🎉 ‍ 搭建博客非一日之功 我从 2022 年 4 月开始搭建博客,每天/每周都抽出点时间搞,前前后后花了几个月时间,基本功能才算完成了,并且几…

进度报告9

(1)1.学习string和arraylist集合的使用2.案例练习

在python3.8虚拟环境 执行pip 安装Excel的库

1、在开始菜单 打开Anaconda prompt(anaconda3) 2、查看环境列表 3、进入虚拟环境 4、在虚拟换进下使用清华源安装读取excel的库 和写入excel的库 读取Excel文件的库:pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple 写入Excel文件的库:pip install xlwt …

51nod-基因匹配+luogu-【模板】最长公共子序列

https://www.luogu.com.cn/problem/P1439 https://class.51nod.com/Html/Textbook/ChapterIndex.html#textbookId=126&chapterId=338 以上两个都是特例,一个是每个元素不重复,一个是每个元素均有5个。正确性说明参考:https://www.luogu.com.cn/article/1bcs9052 由于一般…

大语言模型的Scaling Law:如何随着模型大小、训练数据和计算资源的增加而扩展

人工智能的世界正在经历一场革命,大型语言模型正处于这场革命的前沿,它们似乎每天都在变得更加强大。从BERT到GPT-3再到PaLM,这些AI巨头正在推动自然语言处理可能性的边界。但你有没有想过是什么推动了它们能力的飞速提升? 在这篇文章中,我们将介绍使这些模型运作的秘密武…

教你如何管理Linux网络,一招鲜吃遍天?!

01 准备工作 当前操作的虚拟机版本信息:CentOS8 当前操作的虚拟化软件:VMware workstation 由于虚拟化软件中有3种网络模式,我们这里选择使用NAT模式 提前查看虚拟机的网段信息是多少,方便我们后续配置网络能够有效使用在配置网络之前您需要了解一些基础知识: 在给Linux系…

使用iwctl连接无线网络

检查wifi模块驱动是否正确 ip addr #输出的信息查看是否 包含‘w’开头的网卡安装iwd这里使用iwd管理WiFi,主要原因是小巧,方便使用无需额外配置# 安装 apt install iwd # 设置开机启动 systemctl enable --now iwd # 查看无线网卡 iwctl device list# 扫描并获取无线网络 iw…

Hisiphp2.0.11的文件上传

php第二个复现漏洞,危险函数PclZip()侵权声明 本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。 如果您是版权持有人,并且认为您的作品被侵犯,请通过以…

直播系统,利用关联规则实现推荐算法

直播系统,利用关联规则实现推荐算法关联规则是以规则的方式呈现直播系统之间的相关性:关联规则(Association Rules)是反映一个事物与其他事物之间的相互依存性和关联性,是数据挖掘的一个重要技术,用于从大量数据中挖掘出有价值的数据项之间的相关关系。关联规则的经典例子是…

项目经理的新伙伴:性能出众的进度管理软件

国内外主流的10款项目进度管理软件对比:PingCode、Worktile、Teambition、石墨文档(Shimo Docs)、Tower、有道云协作、Monday.com、Asana、Airtable、Notion。在管理任何项目时,及时准确地跟踪进度是至关重要的,但在琳琅满目的项目管理软件中找到最合适的一款却常常令人头…

mysqldump: Got error: 1066: Not unique table/alias: act_evt_log when using LOCK TABLES

先说解决办法:执行下面语句 mysqldump -ushooter -p123123 --single-transaction fd>fd.sqllower_case_table_names区分大小写设置 注意:此参数不可以动态修改,必须重启数据库 1 2 3 41、参数含义: lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候…