GDB查看内存
上个章节讲解的是通过 print 命令打印程序中表达式信息,但是不能查看内存中的一些信息。而 GDB 中为我们提供了查看内存的命令 x,它是 examine 命令的简写,使用 x 命令查看内存数据的格式有很多种,这里的内存数据可以是任意类型。命令的详细介绍如下。
命令格式如下:
实例:
命令格式如下:
x /<n/f/u> <addr>
n、f、u 都是可选的参数,其中,n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容;f 表示显示的格式;u 表示将多少个字节作为一个值取出来,如果不指定的话,GDB默认是4个bytes,如果不指定的话,默认是4个bytes。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。<addr>表示一个内存地址。
参数 f 的可选值:
- x 按十六进制格式显示变量。
- d 按十进制格式显示变量。
- u 按十六进制格式显示无符号整型。
- o 按八进制格式显示变量。
- t 按二进制格式显示变量。
- a 按十六进制格式显示变量。
- c 按字符格式显示变量。
- f 按浮点数格式显示变量。
参数 u 的可选值:
- b 表示单字节
- h 表示双字节
- w 表示四字节
- g 表示八字节
实例:
(gdb) print arr
$5 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
(gdb) x /10dw arr
0x7fffffffdfb0: 1 2 3 4
0x7fffffffdfc0: 5 6 7 8
0x7fffffffdfd0: 9 0
(gdb) print main
$7 = {int (void)} 0x5555555546aa <main>
(gdb) x 0x5555555546aa
0x5555555546aa <main>: -443987883
注意:x 命令使用时,由于输出格式字符 f 和单位长度 u 的字符是不冲突的,所以在使用的时候不需要考虑这两个参数的顺序问题。例如,10dw 和 10wd和参数的执行效果相同,但是 n 必须在最前面。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算