在gdb中以16进制的方式打印变量
在gdb调试过程中可以通过 print(p)
查看指定变量的内容。在默认情况下,数字是以10进制的形式显示的,但有时候我们想以16进制的形式查看该变量。
调整变量的输出格式
在使用gdb调试时,使用 p/x
就能够以16进制(hexadecimal)的形式输出该变量,使用语法为:
(gdb) p/x variable_name
gdb中的格式参数还有以下几种:
-
a
指针格式
-
c
字符格式
-
d
整数格式
-
f
浮点数格式
-
o
八进制整数格式
-
s
字符串格式
同理,使用 p/t
能够以2进制(binary)的方式输出变量;使用 p/a
能够以指针的方式输出变量;使用 p/o
能够以8进制的格式输出。
TIPS: 在gdb调试时,可以使用 set output-radix 16
修改 print
操作默认输出格式为16进制,使用 set output-radix 10
将输出格式调回默认的10进制。
使用 display
跟踪某个变量
display
的用法与 print
的用法相似,但是 display
会在每次步进执行后输出该变量。这个功能与Visual Studio中的Watch功能比较类似。在不想观察该变量时,使用 undisplay
命令可以取消。
使用 x
命令输出内存
使用 x
命令可以将指定内存地址中的内容打印出来。
简要的命令语法如下:
x/nfu <address>
-
n
用于指定打印的数量。
-
f
用于指定打印的格式。
-
u
用于指定每个打印变量的长度:b(byte)一个字节,h(half-word)两个字节,w(word)四个字节,g(giant word)八个字节。
更详细的用法和示例可以参考之前的一篇 文章 。