gdb - 为什么p / d输出无符号十进制?

时间:2015-08-20 17:13:45

标签: debugging gdb decimal signed

请参阅Debugging with GDB,格式d将打印为带符号的十进制:

enter image description here

但是p/d 0xffffffff给了我4294967295,我希望该值应为-1代替:

(gdb) p/x  -1
+p/x  -1
$1 = 0xffffffff
(gdb) p/d  0xffffffff
+p/d  0xffffffff
$2 = 4294967295
(gdb) p/u  0xffffffff
+p/u  0xffffffff
$3 = 4294967295
(gdb) 

为什么p / d和p / u都返回4294967295?我该如何打印输出带符号的十进制-1

1 个答案:

答案 0 :(得分:1)

  

为什么p / d和p / u都返回4294967295

当您提供GDB 0xFFFFFFFF输入时,会将其视为unsigned int。您可以使用whatis

查看此信息
(gdb) p -1
$1 = -1
(gdb) p/d $1
$2 = -1
(gdb) p/u $1
$3 = 4294967295
(gdb) p/x $1
$4 = 0xffffffff
(gdb) whatis $1
type = int

(gdb) p/d 0xFFFFFFFF
$5 = 4294967295
(gdb) whatis $5
type = unsigned int