gdb 如何调试内存地址
来源:互联网 发布:淘宝规蜜投诉 编辑:程序博客网 时间:2024/06/03 18:49
样例代码
int age= 20; int *p_age = &age; NSLog(@"p_age = %p", p_age); //输出指针变量p_age指向值20所在内存的地址 NSLog(@"&p_age = %p", &p_age); //输出指针变量p_age本身的地址
2017-07-19 15:54:07.048 Test0719[27387:858079] p_age = 0x7fff5313f65c 2017-07-19 15:54:07.050 Test0719[27387:858079] &p_age = 0x7fff5313f650
问题来了
- 能不能通过地址
0x7fff5313f65c
和0x7fff5313f650
查看内存地址中的值? - 如何去验证:
0x7fff5313f650
内存地址的值是:0x7fff5313f65c
,而0x7fff5313f65c
内存地址的值是20
?
答案
在gdb
调试模式下,使用examine(简写x)命令可查看内存地址中的值!参考例子如下:
2017-07-19 16:06:54.160 Test0719[27514:863331] p_age = 0x7fff5c8d965c 2017-07-19 16:06:54.162 Test0719[27514:863331] &p_age = 0x7fff5c8d9650 (lldb) x/d 0x7fff5c8d965c //查看0x7fff5c8d965c内存地址的值,并以十进制方式输出。 0x7fff5c8d965c: 20 //输出结果是20 (lldb) x/x 0x7fff5c8d9650 //查看0x7fff5c8d9650内存地址的值,并以十六进制方式输出。 0x7fff5c8d9650: 0x5c8d965c //输出结果是一个4字节大小的类似指针地址的值,而指针变量类型大小应该是8个字节 (lldb) x/g 0x7fff5c8d9650 //所以,这里使用g参数来表示字节8个字节,重新输出8个字节的内存地址的值 0x7fff5c8d9650: 0x00007fff5c8d965c //8个字节大小的内存地址的值,它是一个地址 (lldb) x/d 0x00007fff5c8d965c //查看0x00007fff5c8d965c 内存地址的值,并以十进制方式输出。 0x7fff5c8d965c: 6669152202784768020 //因为,不指定输出字节大小,默认应该输出4个字节内存大小,所以其值非常大 (lldb) x/1db 0x00007fff5c8d965c //所以,调整为输出1个字节的内存大小的值,并以十进制方式输出 0x7fff5c8d965c: 20
X命令使用
x/<n/f/u> <address>
n、f、u是可选的参数。
n
是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义。
f
表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。
u
表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。
输出格式
一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:
x
按十六进制格式显示变量。
d
按十进制格式显示变量。
u
按十六进制格式显示无符号整型。
o
按八进制格式显示变量。
t
按二进制格式显示变量。
a
按十六进制格式显示变量。
c
按字符格式显示变量。
f
按浮点数格式显示变量。
阅读全文
0 0
- gdb 如何调试内存地址
- 用gdb如何查看指定地址的内存内容?
- 用gdb如何查看指定地址的内存内容?
- gdb调试内存错误
- gdb如何查看内存
- gdb调试时查看内存
- gdb调试(1)-查看内存
- gdb调试时查看内存
- 如何利用gdb调试程序之细节(info reg命令以及寄存器地址)
- 如何使用gdb调试程序
- 如何使用gdb调试程序
- 如何使用gdb进行调试
- gdb 如何调试release版本
- 如何使用GDB调试多线程
- 如何使用GDB调试多线程
- 如何使用gdb调试程序?
- gdb查看内存地址里面的数据
- gdb 调试 显示内存的方法
- [bzoj1500][NOI2005]维修数列 splay大模板
- Python String方法
- 2018国家公务员考试备考反面论证法在片段阅读中的用法小结(1)
- 什么是socket
- STM8 入门学习与实验(一)GPIO与UART
- gdb 如何调试内存地址
- Data Structure-2 Queue 循环队列,用数组实现
- strncpy字符串拷贝函数
- Android 仿QQ未读消息拖拽删除粘性控件效果
- lintcode --螺旋矩阵II
- wireshark 学习更进一步 之RST数据解读
- Hdu-5371 Hotaru's problem(马拉车算法)
- Java NIO系列教程(六) Selector
- bzoj 2301 problem b 莫比乌斯反演 解题报告