GDB 简略手册

2023-11-19

杂项

命令 用法 说明
h[elp] help 显示可用帮助文档
h CMD 显示关于指定命令的帮助
apr[opos] apr REGEXP 使用正则表达式搜索命令
i[nfo] info 显示可展示的信息
ENTER 无命令回车 重复执行上一次命令

断点

命令 用法 说明
info break i b 显示全部断点和检查点信息
info watch i wat 显示全部检查点信息
b[reak] break 在当前位置添加断点
b N 在指定行添加断点
b +N 在当前行偏移 N 行后添加断点
b FUNC 在指定函数开头添加断点
wa[tch] wa EXPR 添加检查点,当表达式值变化时程序中断
rw[atch] rw EXPR 添加检查点,当表达式被读取时程序中断
aw[atch] aw EXPR 添加检查点,当表达式被读写时程序中断
d[elete] delete 删除全部断点和检查点
d N 删除指定编号的断点或检查点
cl[ear] clear 删除当前位置的断点
cl LOC 删除指定位置的断点 (参数同 b)
dis[able] disable 使全部断点和检查点失效
dis N 使指定编号的断点或检查点失效
en[able] enable 使全部断点和检车点生效
en N 使指定编号的断点或检查点生效

运行

命令 用法 说明
r[un] run [ARGS] 开始运行程序
file file FILE 使用 FILE 为被调试程序
at[tach] at PID 将调试器 attach 到已经在运行的程序
q[uit] quit 退出 GDB
Ctrl-C 按下组合键 终止正在运行的程序
n[ext] n [N] 单步运行
s[tep] s [N] 单步运行,会进入被调用函数
fin[ish] finish 执行完当前函数
c[ontinue] c [N] 继续执行程序直到下一 (N) 个断点
adv[ance] adv LOC 执行到指定位置 (参数同 b) 或者当前函数结束

汇编相关

命令 用法 说明
disas[semble] disassemble 显示反汇编指令
n[ext]i ni [N] 单步指令运行
s[tep]i si [N] 单步指令运行,会进入被调用函数

变量

命令 用法 说明
p[rint] p EXPR 打印表达式值
p *PTR 打印指针指向的变量值
p VAR@N 打印从 VAR 起的 N 个连续变量
p/FMT EXPR 格式化打印
pt[ype] pt VAR 显示变量类型
info local i lo 显示所有局部变量
info args i ar 显示所有函数参数
disp[lay] disp [/FMT] EXPR] 持续显示表达式值
und[isplay] und N 取消持续显示
info display i disp 查看所有被持续显示的表达式
set set VAR 设置变量的值

print 支持的 FMT 格式:
x (16进制)、z (前面填充0的16进制)、d (10进制)、u (无符号10进制)、o (8进制)、t (2进制,Two)、f (浮点数)、a (地址)、c (字符)、s (字符串)

栈回溯

命令 用法 说明
b[ack]t[race] backtrace / bt 显示当前函数调用栈
f[rame] frame 显示当前 (调用栈) 位置
up up 在当前函数调用栈中上移一层
do[wn] do 在当前函数调用栈中下移一层

多线程程序中 thread apply all bt 可用于显示所有线程的函数调用栈。

多线程

命令 用法 说明
i thread i thread 查看所有线程状态
t [t_id] t N 切换到指定线程

查看源码

命令 用法 说明
l[ist] list 显示当前位置附近的源码
l *$rip 显示当前位置附近的源码
l N 显示指定位置 (行) 附近的源码
l CLASS/FUNC 显示指定类/函数源码

TUI (Text User Interface) 模式

三种进入方法:

  • 启动 GDB 时加入 -tui 参数
  • 在 GDB 命令行输入 tui enable
  • 在 GDB 命令行中按下 Ctrl+X, A 组合键
命令 用法 说明
la[yout] la src 显示源码视图
la asm 显示反汇编指令视图
la regs 显示寄存器视图
la prev 显示前一个视图
la next 显示后一个视图
focus fs [WIN | prev | next] 移动窗口焦点
info win i wi 显示窗口信息

关于窗口焦点:如果除了 cmd 之外的窗口获得了焦点,则可以通过方向键或者在命令行中输入 -, +, <, > 来移动显示。

Coredump

在终端执行 ulimit -a 命令查看系统的用户限制中 -c 一项的值,如果是 0 则表示禁止生成 corefile,我们可以将其设为 unlimited,即执行 ulimit -c unlimited (注意:ulimit 设置只对当前终端有效,如果想一直生效,可以把该命令写入 /etc/profile 文件)。

默认 corefile 生成在当前目录下,文件名为 core,其生成模板定义在 /proc/sys/kernel/core_pattern 中,可自定义生成模板,比如:

sudo bash -c 'echo "/home/core-%e-%p-%s-%t" > /proc/sys/kernel/core_pattern'

生成模板中支持的变量有:

  • %e 可执行文件名 (无路径)
  • %E 可执行文件完整路径
  • %i 出 core 的线程 TID
  • %p 出 core 的进程 PID
  • %s 导致 core 的信号数字
  • %t 时间戳
  • %u 出 core 的进程 UID

加载 corefile 来分析 core 原因:gdb EXEFILE COREFILE

参考资料

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

GDB 简略手册 的相关文章

随机推荐

  • macos多合一系统安装u盘制作器_U 盘多系统安装盘制作神器YUMI

    通常我们一个 U 盘只能制作成一个系统安装盘 比如制作好一个 Windows 10 安装盘 日后想要用到 Linux WinPE 等安装盘时 只能重新制作一遍 非常浪费时间 而且现在 U 盘容量都很大 如果只放一个系统 同样就会白白浪费 U
  • 软考-操作系统

    考点梳理 进程管理 考点1 进程的状态 考法分析 本考点主要考查形式主要是根据图示判断相关状态位置或状态变迁条件 要点分析 操作系统三态模型如下图所示 操作系统五态模型 备考点拨 掌握操作系统三态模型 五态模型的状态位置及其状态变迁条件 考
  • arcgis 10.8 for win10安装教程

    本文主要记录arcgis安装步骤 遇到的问题等 文章目录 一 前提 二 下载与安装 1 下载 2 安装 参考资料 一 前提 下载前需要确定 1 ArcGIS对系统的要求 安装之前系统需安装 net framework 4 5 以上版本 我的
  • 【翻译】 WireGuard 何去何从?

    请考虑订阅 LWN订阅是 LWN net 的生命线 如果您喜欢这些内容并希望看到更多 您的订阅将有助于确保 LWN 继续蓬勃发展 请访问此页面加入我们 让 LWN 继续在网络上传播 作者 Jonathan Corbet 2019年3月25日
  • Angular2 之 单元测试

    单元测试需要掌握的知识点 karma conf js的配置 具体了解到每一项的意义 这样才能真正的了解这个配置是如何配置的 甚至才可以做到自己的配置 组件的测试 单独的service测试 Angular的测试工具 Angular的测试工具类
  • 飞机大战(C语言版)

    大一下要交课程设计 于是就用C语言写了一个飞机大战小游戏 没有用到第三方库 飞机和子弹的移动使用的光标移动函数 所以没有卡顿 其中w s a d分别表示上下左右 包括大写 空格发射子弹 游戏结束后可选择是否储存游戏数据 该程序复制后可直接使
  • git push错误: failed to push some refs to

    原因 当你在git上对它进行了在线修改 但是没有对本地库进行同步 这个时候你再次commit 想把本地库提交到远程git库中 就会出现push失败问题 简单来说 就是远程与本地存在不一致的commit情形 解决方法 确保远程代码没问题的情况
  • 【Java SE】抽象类和接口

    点进来你就是我的人了博主主页 戳一戳 欢迎大佬指点 欢迎志同道合的朋友一起加油喔 目录 前言 一 抽象类 1 抽象类的概述 2 抽象类特点 3 抽象关键字abstract和哪些不可以共存 4 抽象类的细节 5 抽象类的作用 二 接口 1 什
  • 统计学习方法论概念

    1 统计学习包含监督学习 非监督学习 半监督学习和强化学习 2 监督学习 监督学习的任务是学习一个模型 使模型能够根据任意给定的输入 对模型的输出做出一个好的预测 监督学习分为学习和预测两个过程 由学习系统和预测系统组成 3 损失函数和风险
  • 【C++】迭代器 && vector中迭代器失效

    文章目录 1 什么是迭代器 2 迭代器与指针 3 迭代器的分类 3 1具体分类 3 2为什么要对迭代器分类 3 3迭代器的使用建议 4 vector迭代器失效 4 1迭代器失效及其危害 4 2哪些操作会导致迭代器失效 如何解决 1 什么是迭
  • 视觉SLAM十四讲笔记-6-3

    视觉SLAM十四讲笔记 6 3 文章目录 视觉SLAM十四讲笔记 6 3 6 3 实践 曲线拟合问题 6 3 1 手写高斯牛顿法 6 3 2 使用Ceres进行曲线拟合 Ceres 简介 安装Ceres 使用Ceres拟合曲线 6 3 3
  • JAVA往map添加元素_java list map在初始化的时候添加元素

    List list new ArrayList add First Object add Second Object add Third Object Map map new HashMap put First Key First Valu
  • 初始OAuth2.0

    1 什么是OAuth2 0 OAuth2 0 是目前使用非常广泛的授权机制 用于授权第三方应用获取用户的数据 举例说明 用户可以通过选择其他登录方式来使用gitee 这里就使用到了第三方认证 OAuth 引入了一个授权层 用来分离两种不同的
  • vue 修改标题名字

    1 直接修改 在main js中添加 document title 大屏控制 2 根据路由动态改变 https www cnblogs com CinderellaStory p 10858035 html
  • iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机?

    iPhone苹果手机15机型区域版本识别代码 CH代码为国行 LL代码为美版 ZP代码为港版 iPhone苹果15手机怎么看是国行还是美版或港版的苹果iPhone15手机 1 打开苹果iPhone15手机桌面上的 设置 2 在iPhone苹
  • OWASP ZAP安装遇到Error.A JNI error has occurred ,please check your installation and try again

    问题描述 我当时下载的是兼容版本 下载完成后双击zap bat发现运行一下就闪退 然后运行jar文件就报错 过程 最开始以为是java环境的问题 后面用java version去运行了一下 发现java环境是正常的 但又一直提示java的问
  • 4大技术亮点支撑应用优势 全新一代旗舰型行业无人机千巡翼X4发布

    随着无人机与数字成像技术的发展 无人机航测成为了重要的地理信息采集手段 也越来越受重视 据相关研报数据统计 预计2025年我国实景三维在自然资源领域的 以数据采集 处理为主的直接市场规模预计将达40亿元 推测2025年关联市场规模将达400
  • MFC设置控件文本字体、大小、颜色、背景

    1 修改字体 大小 声明一个CFont类型的类成员变量 CFont m editFont 然后在类的初始化函数OnInitDialog 中添加以下两行代码 设置静态文本字体大小 m editFont CreatePointFont 180
  • MFC编程实验(三):组件(列表框元素的增删)

    一 实验要求 创建一个对话框应用程序 实现如下布局 完成如下功能 1 初始状态 列表中有4个元素 2 可以在编辑框中输入新朋友的名字 点击 添加 按钮添加到列表框 同时清空编辑框中的名字 3 选中列表框中的一个名字 点击 删除 按钮可以删除
  • GDB 简略手册

    杂项 命令 用法 说明 h elp help 显示可用帮助文档 h CMD 显示关于指定命令的帮助 apr opos apr REGEXP 使用正则表达式搜索命令 i nfo info 显示可展示的信息 ENTER 无命令回车 重复执行上一