在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: 可以使用 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)八个字节

更详细的用法和示例可以参考之前的一篇 文章