学习GDB

2023-11-14

http://blog.csdn.net/blueboy82006/article/details/5586109

学习使用 GNU GDB Debugger

                                              作者:王聪

GDB 常用命令参考手册
  • GDB 命令行参数
  • GDB 命令
  • GDB 操作提示
  • GDB 相关手册
  • 相关链接

 

 
1 GDB 命令行参数

启动 GDB:

  • gdb executable
  • gdb -e executable -c core-file
  • gdb executable -pid process-id 
    (使用命令 'ps -auxw' 可以查看进程的 pid)
选项 含义
--help
-h
列出命令行参数。
--exec=file
-e file
指定可执行文件。
--core=core-file
-c core-file
指明 core 文件。
--command=file
-x file
从指定文件中读取 gdb 命令。
--directory=directory
-d directory
把指定目录加入到源文件搜索路径中。
--cd=directory 以指定目录作为当前路径来运行 gdb 。
--nx
-n
不要执行 .gdbinit 文件中的命令。默认情况下,这个文件中的命令会在所有命令行参数处理完后被执行。
--batch 在非交互模式下运行 gdb 。从文件中读取命令,所以需要 -x 选项。
--symbols=file
-s file
从指定文件中读取符号表。
-write 允许对可执行文件和 core 文件进行写操作。
--quiet
-q
不要打印介绍和版权信息。
--tty=device 指定 device 为运行程序的标准输入输出。
--pid=process-id
-p process-id
指定要附属的进程 ID 。

 

2 GDB 命令

GDB 中使用的命令:

 

命令 描述
help 列出 gdb 帮助信息。
help topic 列出相关话题中的 gdb 命令。
help command 列出命令描述信息。
apropos search-word 搜索相关的话题。
info args
i args
列出运行程序的命令行参数。
info breakpoints 列出断点。
info break 列出断点号。
info break breakpoint-number 列出指定断点的信息。
info watchpoints 列出观察点。
info registers 列出使用的寄存器。
info threads 列出当前的线程。
info set 列出可以设置的选项。
Break and Watch  
break funtion
break line-number
在指定的函数,或者行号处设置断点。
break +offset
break -offset
在当前停留的地方前面或后面的几行处设置断点。
break file:func 在指定的file文件中的func处设置断点。
break file:nth 在指定的file文件中的第nth行设置断点。
break *address 在指定的地址处设置断点。一般在没有源代码时使用。
break line-number ifcondition 如果条件满足,在指定位置设置断点。
break line threadthread-number 在指定的线程中中断。使用info threads可以显示线程号。
tbreak 设置临时的断点。中断一次后断点会被删除。
watch condition 当条件满足时设置观察点。
clear
clear func
clear nth
清除函数func处的断点。
清除第nth行处的断点。
delete
d
删除所有的断点或观察点。
delete breakpoint-number
delete range
删除指定的断点,观察点。
disable breakpoint-number-or-range
enable breakpoint-number-or-range
不删除断点,仅仅把它设置为无效,或有效。
例子:
显示断点: info break
设置无效: disable 2-9
enable oncebreakpoint-number 设置指定断点有效,当到达断点时置为无效。
enable del breakpoint-number 设置指定断点有效,当到达断点时删除它。
finish 继续执行到函数结束。
Line Execution  
step
s
step number-of-steps-to-perform
进入下一行代码的执行,会进入函数内部。
next
n
next number
执行下一行代码。但不会进入函数内部。
until
until line-number
继续运行直到到达指定行号,或者函数,地址等。
return
return expression
弹出选中的栈帧(stack frame)。如果后面指定参数,则返回表达式的值。
stepi
si
nexti
ni
执行下一条汇编/CPU指令。
info signals
info handle
handle SIGNAL-NAMEoption
当收到信号时执行下列动作:nostop(不要停止程序),stop(停止程序执行),print(显示信号),noprint(不显示),pass/noignore(允许程序处理信号),nopass/ignore(不让程序接受信号)
where 显示当前的行号和所处的函数。
Program Stack  
backtrace
bt
bt inner-function-nesting-depth
bt -outer-function-nesting-depth
显示当前堆栈的追踪,当前所在的函数。
backtrace full 打印所有局部变量的值。
frame number
number
选择指定的栈帧。
up number
down number
向上或向下移动指定个数的栈帧。
info frame addr 描述选中的栈帧。
info args
info all-reg
info locals
info catch
显示选中栈帧的参数,局部变量,异常处理函数。all-reg也会列出浮点寄存器。
Source Code  
list
l
list line-number
list function
list -
list start#,end#
list filename:function
列出相应的源代码。
set listsize count
show listsize
设置list命令打印源代码时的行数。
directory directory-name
dir directory-name
show directories
在源代码路径前添加指定的目录。
directory 当后面没有参数时,清除源代码目录。
Examine Variables  
print variable
variable
file::variable
p 'file'::variable
打印指定变量的值。
p *array-var@length 打印arrary-var中的前length项。
p/x var 以十六进制打印整数变量var
p/d var 把变量var当作有符号整数打印。
p/u var 把变量var作为无符号整数打印。
p/o var 把变量var作为八进制数打印。
p/t var
x/b address
x/b &variable
以整数二进制的形式打印var变量的值。
p/c variable 当字符打印。
p/f variable 以浮点数格式打印变量var
p/a variable 打印十六进制形式的地址。
x/w address
x/4b &variable
打印指定的地址,以四字节一组的方式。
call expression 类似于print,但不打印 void 。
disassem addr 对指定地址中的指令进行反汇编。
Controlling GDB  
set gdb-option value 设置 GDB 的选项。
set print array on
set print array off
show print array
以可读形式打印数组。默认是 off 。
set print array-indexes on
set print array-indexes off
show print array-indexes
打印数组元素的下标。默认是 off 。
set print pretty on
set print pretty off
show print pretty
格式化打印 C 结构体的输出。
set print union on
set print union off
show print union
打印 C 中的联合体。默认是 on 。
set print demangle on
set print demangle off
show print demangle
控制 C++ 中名字的打印。默认是 on 。
Working Files  
info files
info share
列出当前的文件,共享库。
file file file当作调试的程序。如果没指定参数,丢弃。
core file file当作 core 文件。如果没指定参数,则丢弃。
exec file file当作执行程序。如果没指定参数,则丢弃。
symbol file file中读取符号表。如果没指定参数,则丢弃。
load file 动态链入file文件,并读取它的符号表。
path directory 把目录directory加入到搜索可执行文件和符号文件的路径中。
Start and Stop  
run
r
run command-line-arguments
run < infile > outfile
从头开始执行程序,也允许进行重定向。
continue
c
继续执行直到下一个断点或观察点。
continue number 继续执行,但会忽略当前的断点number次。当断点在循环中时非常有用。
kill 停止程序执行。
quit
q
退出 GDB 调试器。

 

3 GDB 操作提示

 

  • 在编译可执行文件时需要给 gcc 加上 "-g" 选项,这样它才会为生成的可执行文件加入额外的调试信息。
  • 不要使用编译器的优化选项,比如: "-O","-O2"。因为编译器会为了优化而改变程序流程,那样不利于调试。
  • 在 GDB 中执行 shell 命令可以使用:shell command
  • GDB 命令可以使用 TAB 键来补全。按两次 TAB 键可以看到所有可能的匹配。
  • GDB 命令缩写:例如 info bre 中的 bre 相当于 breakpoints
  • GDB 在 Emacs 中的操作:
emacs 按键 动作
M-x gdb 切换到 gdb 模式。
C-h m 显示 gdb 模式介绍信息。
M-s 等同于gdb 中的 step 命令。
M-n 等同于gdb 中的 next 命令。
M-i 等同于gdb 中的 stepi 命令。
C-c C-f 等同于gdb 中的 finish 命令。
M-c 等同于gdb 中的 continue 命令。
M-u 等同于gdb 中的 up 命令。
M-d 等同于gdb 中的 down 命令。

 

4 GDB 相关手册:

 

  • gdb - GNU debugger
  • ld - The GNU linker
  • gcc/g++ - GNU project C and C++ compiler

 

5 相关链接:

 


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习GDB 的相关文章

随机推荐

  • 【MyBatis】 动态SQL——模糊查询 LIKE

    一 LIKE SELECT FROM t usr WHERE name like name SQL解析为 SELECT FROM t usr WHERE name like 海 可以看到 传参必须用 不能用 所以这样写的弊端就是不安全 不能
  • 腾讯家低调开发的良心工具?目前无任何付费机制还挺好用~

    去年 Tik Tok Clipping 和哔哩哔哩 Clipping 相继推出了自己的桌面编辑软件 相比专业首演 无论是操作逻辑还是内置素材库 它们都能让非专业人士更容易上手 大大降低创作门槛 但还是有朋友反馈电脑不能动 实在没办法动 只好
  • 在macOS上安装NodeJS多版本管理工具

    需求 现在Node js也有很多的版本啦 简单地使用某个版本 只需要去下载安装对应版本就可以了 如果需要多个版本在机器上共存 并在需要时切换到相应的版本环境 这时候就需要多版本的管理工具了 而 n nvm就是这个有效的工具 简介 NVM 即
  • 【SQL注入-无回显】时间盲注:原理、函数、利用过程

    目录 一 时间盲注 延时 1 1 简介 1 2 原理 二 常用函数 2 1 延迟函数 编辑 2 2 相关函数 2 3 示例语句 三 利用过程 3 1 第一步 判断注入点 3 2 第二步 判断可使用注入方法 3 3 第三步 猜数据库名称长度
  • springBoot 部署Docker环境中

    目录 一 准备 二 docker运行环境 三 DockerFile 四 制作镜像 五 启动容器 六 访问 一 准备 需要打好的 jar 包 这里不再赘述 docker 环境 二 docker运行环境 安装JDK docker pull pr
  • monkeyrunner之夜神模拟器的安装与使用(二)

    在上一篇文章 安卓开发环境搭建中 我们创建并启动了eclipse自带的安卓模拟器 该模拟器不仅启动慢 而且在使用过程中的反应速度也是出奇的差 经常出现卡机现象 为了解决这种现象 因此 我们又寻找到了更加合适的模拟器 夜神模拟器 该模拟器除了
  • JavaScript离线手册 w3c(w3school) 百度网盘

    听尚硅谷李超老师课 感觉离线文档特别实在 JavaScript w3school 离线分享 baidu wangpan 链接 https pan baidu com s 1AwMZy2MpvxzBtePtDp39nQ pwd imle 提取
  • 【Zabbix实战之部署篇】Zabbix监控windows系统配置方法

    Zabbix实战之部署篇 Zabbix监控windows系统配置方法 一 检查Zabbix监控平台状态 1 检查Zabbix各组件状态 2 检查Zabbix的首页 二 下载windows代理 1 访问Zabbix官网下载界面 2 查看下载安
  • Redis 分布式集群搭建

    转 https blog csdn net daybreak1209 article details 51493265 在Redis的安装和部署 Linux 一文中详细介绍了在Linux环境中搭建Redis服务 本文将介绍关于Redis分布
  • python如何不生成pyc文件(三种方式)

    python如何不生成pyc文件 三种方式 当 import导入另一个模块的时候会生成pyc文件 python3会生成 pycache 如何不生成编译文件呢 1 使用 B参数 即 python3 B test py 里面的包含的就不会生成p
  • 最强自动化测试框架Playwright(4)-控件操作

    文本输入 适用于input textarea 其他可编辑内容的元素 Text input page get by role textbox fill Peter Date input page get by label Birth date
  • 使用MATLAB的trainNetwork设计一个简单的LSTM神经网络

    文章目录 前言 一 数据集 二 网络结构 三 测试程序 前言 借助MATLAB的deepNetworkDesigner搭一个简单的LSTM 数据集使用mnist手写数字识别数据集 一 数据集 mnist数据集包括60000组训练数据和对应的
  • 一个华科研究生导师的肺腑之言(主要适用于理工科)

    各位科研同志们看看吧 仁者见仁智者见智 总归有点用 人太多 不一一 啦 1 作为你们的老师 我现在每周工作60小时 踏踏实实的60小时 阅读 实践 思考 讨论和请教 周而复始 其实这还不够用 因为我既要独立做这边自己的课题 还要协助各位完成
  • Java 中如何对集合进行排序

    Java 中如何对集合进行排序 在 Java 中 集合是一种非常常见的数据结构 它可以用来存储一组元素 而且可以动态地增加或删除元素 在实际的开发中 我们经常需要对集合中的元素进行排序 以便更方便地查找 比较和操作集合中的数据 本文将介绍
  • 金融期货具体的开户条件

    金融期货主要是以金融产品为标的的标准化期货合约 金融产品涵盖指数 股票 汇率 利率等金融工具 一般是以现金交割的方式到期结算 主要是在中国金融期货交易所上市 目前上市了股指期货 国债期货 沪深300指数期权等品种 金融期货支持手机网上开户
  • 数据库表结构

    数据库表结构 mysql SELECT COLUMN NAME 列名 COLUMN TYPE 数据类型 DATA TYPE 字段类型 CHARACTER MAXIMUM LENGTH 长度 IS NULLABLE 是否为空 COLUMN C
  • ZeroTier内网穿透工具配置

    之前有写了一篇frps内网穿透的教程 不过frps要求比较高 需要有个有固定IP的服务器 所以这个就有限制了小伙伴们没有服务器的 这次我们写个不需要外网服务器的教程 软件就是zerotier这个东西了 原理我们就不分析了 反正内网穿透的理解
  • 放大器的增益带宽积

    放大器的增益带宽积 指定为GBWP GBW GBP或GB 是放大器带宽和带宽的增益的乘积 是用来简单衡量放大器的性能的一个参数 在频率足够大的时候 增益带宽积是一个常数 假设运算放大器的增益带宽积为1 MHz 它意味着当频率为1 Mhz时
  • Python:Jenkins包

    文章目录 简介 功能介绍 连接Jenkins 操作Jenkins的jobs 基本功能集锦 获取当前所有的job列表 获取指定job的基本配置 获取指定job的信息字典 获取执行构建记录的完整信息 参考文献 简介 Jenkins是一个比较方便
  • 学习GDB

    http blog csdn net blueboy82006 article details 5586109 学习使用 GNU GDB Debugger 作者 王聪 GDB 常用命令参考手册 GDB 命令行参数 GDB 命令 GDB 操作