首页 > 其他分享 >GDB命令全量版

GDB命令全量版

时间:2024-07-27 10:28:21浏览次数:8  
标签:info set 指定 命令 GDB 全量 print 断点

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 查看当前文件的程序语言

标签:info,set,指定,命令,GDB,全量,print,断点
From: https://www.cnblogs.com/cuidexu/p/18326694

相关文章

  • GDB使用实例
    常用命令/调用函数gdbattach28462setheight0handleSIGUSR2SIG43SIG39SIGCONTnoprintnostopinfoline*(set_specpara_tick+0x3ec)bpreprocess_ip_addrinfolocalspg_worker_wall_ctx.seq_num=18·callhttp_perf_add_metirc(0,0,99)·callget_node_me......
  • CentOS 7 执行 yum 命令失败
    1、执行yum命令报404错误1)检查yum仓库是否配置正确,可以到阿里云下载repo配置文件。wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo2)如果报错中包含$releasever变量,则执行rpm-qa|grepcentos-release确认centos-release是否安装。......
  • markdown命令基本用法
    Markdown学习1.标题(1-6个)+Space+标题内容的多少决定是几级标题2.字体Hello,world!斜体:*+内容+*Hello,world!加粗:**+内容+**Hello,world!斜体加粗:三个*+内容+三个*Hello,world!删除线:~~+内容+~~Hello,world!引用:>+内容3.分割线---或者***4.图片......
  • Excel常用的一些命令和功能
    excel单元格删除光标后面的数字,用Ctrl+Del快捷键;  删除多个单元格里面的值,用Ctrl+Del快捷键,也可以扩大范围框选;智能排序:在单元格里输入星期一,把光标放在单元格的右下方,等到出现+就可以向右和向下拖动,如图:都可以拖动,因为这些已经提前配置好了,如果没有配置,可以点击文件->选项->......
  • 【Git学习】概念+原理+常用命令(简洁,快速上手)
    本篇文章是我看完尚硅谷视频后作的总结,分享一下学习笔记。        软件配置管理(SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护        版本控制:软件版本,......
  • Megacli命令
    Megacli命令简介Megacli命令用于维护查看硬件RAID软件信息下载地址:https://www.broadcom.com/site-search?q=MegaCLI解压过后有windows和linux两个目录,根据不同的系统进行安装。查看raid信息/usr/sbin/MegaClildinfolalla0查看所有硬盘信息/usr/sbin/MegaCli-pdlis......
  • Linux 查找命令
    目录1.查看二进制文件which 2.查看指定文件find​2.1文件名查找2.2文件大小查找前面学习过的Linux命令,其实质是一个个的二进制可执行程序,与Windows系统中的.exe文件是一个意思。1.查看二进制文件which 语法: which 命令可以查看使用的一系列命......
  • 一条命令搞定WPS免登录,轻松省时又省力!
    文章目录......
  • conda常见命令
    以下是一些常见的conda命令及其用途,它们可以帮助你管理Conda环境和包:环境管理创建新环境:condacreate--nameenv_namepython=3.8创建一个名为env_name的环境,并指定Python版本(如3.8)。激活环境:condaactivateenv_name激活名为env_name的环境。停用当前环境......
  • 常见Linux命令
    重要(1)top:查看内存/显示系统当前进程信息(2)df-h:查看磁盘存储状况(3)iotop:查看IO读写(4)iotop-o:直接查看比较高的磁盘读写(5)netstat-tunlp|grep端口好:查看端口占用情况(6)netstat-a:列出所有端口(7)lsof-i:端口号:查看端口号占用情况(8)uptime: 查看报告系统运行时长及平均......