惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - PKICA

汇编语言语法详解 gdb汇编调试 gdb-pwndbg的安装与使用指南 gdb调试插件gef C语言thread_local linux系统readelf命令使用指南 gcore转储进程内存 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
gdb查看命令
PKICA · 2026-04-11 · via 博客园 - PKICA

1. x 检查内存内容

在 GDB 中,x 命令是 Examine 的缩写,专门用于直接查看内存内容。与 print (或 p) 不同,x 命令不受变量类型的限制,可以以任何格式、任何长度解析指定地址的数据。

1.1 x命令语法

x 命令的标准格式如下:

x / [数量][格式][单位] [起始地址]
  • n (数量):要显示的元素个数(十进制整数)。
  • f (格式):数据显示的方式。
  • u (单位):每个元素的大小(字节数)。
  • addr (起始地址):可以是内存地址(如 0x400500)、变量名(&var)或寄存器($pc)。

1.2 常用参数速查

格式 (f) x 十六进制 (Hexadecimal)   d 有符号十进制 (Decimal)   u 无符号十进制 (Unsigned Decimal)   t 二进制 (Binary)   c 字符 (Char)   s 字符串 (String)   i 汇编指令 (Instruction) 单位 (u) b Byte (1 字节)   h Halfword (2 字节)   w Word (4 字节,默认值)   g Giant word (8 字节)
参数项 [6, 8, 10, 11]代码含义

1.3 常见用法示例

  • 查看字符串:以字符串格式显示 str 指向的内容。
    (gdb) x/s str
    
  • 反汇编查看指令:显示从当前程序计数器 ($pc) 开始的 5 条汇编指令。
    (gdb) x/5i $pc
    
  • 查看十六进制数组:以十六进制显示起始地址后的 8 个“半字”(16位,即 2 字节)数据。
    (gdb) x/8xh 0x7fffffffe000
    
  • 查看字节流:查看变量 data 后的 16 个字节。
    (gdb) x/16bx &data

1.4 进阶特性

  • 状态延续 (Sticky Formatting):GDB 会记住你上次使用的格式和单位。如果你只输入 x/4,它会沿用之前的格式和单位,仅改变显示的个数。
  • 回车重复:在执行完一次 x 命令后,直接按回车键将继续从上次结束的地址显示相同长度和格式的内存。

2. display 自动显示

在 GDB 调试中,display 命令用于在每次程序暂停(如断点、单步执行 next/step)时自动显示特定变量或表达式的值。这对于观察循环中变量变化非常有用。

2.1 display基础用法

在程序断点处,使用 display 添加需要监控的变量:

(gdb) display 变量名
(gdb) display 表达式

示例:

(gdb) break 10         # 在第10行设置断点
(gdb) run              # 运行
(gdb) display i        # 监控循环变量 i
(gdb) display sum      # 监控变量 sum
(gdb) n                # 单步执行,每次暂停都会打印 i 和 sum

GDB 会给每个 display 表达式一个编号(如 1: i = 5),以便后续删除或禁用

2.2 显示格式化

display 也可以结合格式化符号 /fmt 使用,语法为 display/fmt 表达式。 

  • 十六进制: display/x 变量名
  • 二进制: display/t 变量名
  • 十六进制内存/指针: display/a 变量名
  • 字符: display/c 变量名

常用格式总结:

  • display/i $pc:显示当前执行的汇编指令(在单步汇编调试时非常有用)。
  • display/x $eax:十六进制显示寄存器 $eax。

2.3 管理显示列表 (Info/Delete/Undisplay)

  • 查看当前显示列表: info displayinfo displays
  • 禁用/恢复显示:
    • disable display <编号>:禁用,不会被打印。
    • enable display <编号>:恢复打印。
  • 删除显示:
    • undisplay <编号>:删除指定的显示条目。
    • delete display <编号>:同上,效果一致。
    • delete display:删除所有 display 表达式。

2.4 display vs print

  • print (p): 一次性打印变量当前值。
  • display: 添加到自动打印列表,每次暂停都会自动显示该变量的最新值。

2.5 高级技巧

  • 自动查看数组的一部分: display/10x buf (以十六进制显示 buf 数组前10个元素)。
  • 观察结构体: display *ptr (自动解引用指针,显示结构体内容)。

💡 快速上手示例

(gdb) start
(gdb) display i
(gdb) display n
(gdb) display/x 0x400500  # 显示内存地址的内容
(gdb) info display        # 查看所有显示的变量
1: i = 0
2: n = 5
3: 0x400500 = 0x...
(gdb) undisplay 3         # 停止显示内存地址

3. info命令

在 GDB 中,info 是一个极其强大的“探测”命令,用于查看程序运行时的各种内部状态。它的基本语法是 info <子命令>可简写为 i <子命令>)。

以下是开发中最常用的 info 命令分类:

3.1 info查看断点与监控

  • info breakpoints (或 i b): 列出所有断点、观察点及其编号、状态(启用/禁用)和命中次数。
  • info watchpoints: 专门查看已设置的观察点。

3.2 查看变量与函数

  • info locals: 显示当前函数(栈帧)中所有局部变量的值。
  • info args: 显示当前函数的参数名及其值。
  • info functions: 列出程序中定义的所有函数名。也可以使用正则过滤,如 info functions ^my_
  • info variables: 列出所有的全局和静态变量。

3.3 查看运行状态与堆栈

  • info stack (或 i s): 显示当前的函数调用栈(类似于 backtrace)。
  • info frame(或 i f): 显示当前选定栈帧的详细信息,包括内存地址、寄存器保存位置等。
  • info threads: 查看当前所有线程的状态。
  • info program: 查看程序的执行状态(如:正在运行、已停止及停止原因)。
  • info catch:打印出当前的函数中的异常处理信。

其他堆栈相关命令:

  • backtrace <n>bt <n>:打印栈顶上 n 层的栈信息
  • backtrace <-n>bt <-n>:打印栈底下 n 层的栈信息
  • up <n>:向栈的上面移动 n 层
  • down <n>:向栈的下面移动 n 层

3.4 底层与硬件信息

  • info registers (或 i r): 显示通用寄存器的当前值。
  • info all-registers: 显示包括浮点和向量寄存器在内的所有寄存器。
  • info line: 显示源代码行对应的内存地址。例如 info line main.c:10
  • info address(简写 i addr)主要用于查找符号(变量或函数)在内存中的具体位置

3.5 其他有用信息

  • info display: 查看通过 display 命令设置的自动显示列表。
  • info signals: 查看 GDB 如何处理各种系统信号(是否停止、是否打印消息)。
  • info sharedlibrary: 列出程序加载的所有共享库及其内存映射地址。

小贴士:
如果不确定某个具体的子命令,可以直接输入 help info 来获取完整的可用信息列表。

您当前是在调试多线程程序还是在处理底层汇编?我可以为您推荐更针对性的 info 用法。

参考资料: