发布网友 发布时间:2022-04-07 18:20
共3个回答
懂视网 时间:2022-04-07 22:42
格式: x /nfu
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
Format letters are o(octal), x(hex), d(decimal), u(unsigneddecimal), t(binary), f(float), a(address), i(instruction), c(char) ands(string). Size letters are b(byte), h(halfword), w(word), g(giant, 8bytes) 举例 x/3uh buf 表示从内存地址buf读取内容, h表示以双字节为一个单位, 3表示三个单位, u表示按十六进制显示 例子: n是个局部变量 Breakpoint 1, main (argc=1,argv=0xbffff3a4) at calc.c:7 7 int n = atoi(argv[1]); (gdb) print &n $1 = (int *) 0xbffff2ec (gdb) x 0xbffff2ec 0xbffff2ec: 0x00282ff4 (gdb) print * (int *) 0xbffff2ec $2 = 2633716 (gdb) x /4xw 0xbffff2ec 0xbffff2ec: 0x00282ff4 0x080484e0 0x00000000 0xbffff378 (gdb) x /4dw 0xbffff2ec 0xbffff2ec: 2633716 134513888 0 -1073745032 (gdb)
gdb查看内存区和寄存器i
标签:
热心网友 时间:2022-04-07 19:50
内存和cpu是硬件的概念,在程序中只有被映射后的内存和线程/进程的概念,具体如何调度程序的内存地址和线程/进程的挂起和运行都是操作系统来做的。使用gdb能够查看当前程序各个变量的内存数据内容此时的内存地址对程序员来说是没什么用的(除非是做硬件开发,可能会需要),gdb还能够查看当前程序中那些线程被挂起或正在运行,但查询不到当前线程在哪个cpu上运行。追问对啊对啊,就是想看操作系统怎么弄的,比如fork()以后怎么看它占用的内存信息,和CPU是怎么处理的,什么时候挂起什么时候继续执行,还有它占用的内存起始地址多少占了多少,要怎么看呀,Linux就一脸懵*追答回答被采纳,没法直接回复你的追问了,在这里说吧!无论在linux还是windows,你说的要求都是以看不了的。
首先内存在操作系统层面有一个物理地址到逻辑地址的映射,各类硬件设备、虚拟内存都会占用一部分内存地址空间,操作系统会将这些内存地址空间和实际的物理内存一起进行内存管理。所以你看到的内存地址,不一定是真实的物理内存地址看到只是逻辑地址。
在一个,cpu的调度。cpu的调度策略是取决于操作系统核心的,同样的linux,不同的核心版本可能调度cpu的方式都不一样。常用的程序语句sleep()或者互斥锁等等操作都会导致线程挂起,但当你的程序数量多于操作系统cpu数量时,cpu如何调度这些进程或者线程那就没法看到了。
上述两个问题都可以在操作系统原理相关的书籍中找到。建议你去看一下操作系统相关的数据来了解操作系统对内存与cpu的管理策略。当然,书里面的都是比较旧或者比较基础的原理。真正的常用操作系统可能有着自己独特的优化方式。
热心网友 时间:2022-04-07 21:08
可以用linux版的QT,很方便的。追问是嘛,过几天我安装好了再请教