Gcc 如何在GDB中打印64位值

Gcc 如何在GDB中打印64位值,gcc,gdb,Gcc,Gdb,如果启动gdb会话并键入: (gdb) p/x 1024*1024*1024*2 $2 = 0x80000000 但如果我超过32位阈值,我会得到: (gdb) p/x 1024*1024*1024*4 $3 = 0x0 如何在gdb中显示整个64位值?尝试转换该值: (gdb) p/x (unsigned long long) 1024*1024*1024*4 $1 = 0x100000000 除了Yaniv的答案外,您还可以在其中一个数字上使用ll后缀(根据您的系统,只有一个l可以工作

如果启动gdb会话并键入:

(gdb) p/x 1024*1024*1024*2
$2 = 0x80000000
但如果我超过32位阈值,我会得到:

(gdb) p/x 1024*1024*1024*4
$3 = 0x0
如何在gdb中显示整个64位值?

尝试转换该值:

(gdb) p/x (unsigned long long) 1024*1024*1024*4
$1 = 0x100000000

除了Yaniv的答案外,您还可以在其中一个数字上使用
ll
后缀(根据您的系统,只有一个
l
可以工作):

如果需要执行无符号算术,当然可以使用
ull

如果要改为使用x命令将内存内容打印为64位值,可以使用
g
size修饰符:

(gdb) x/8xg  
0x7fffffffe008: 0x0000000000400e44  0x00007ffff7fe3000
0x7fffffffe018: 0x0000000000000000  0x0000000000000000
0x7fffffffe028: 0x0000000000f0b5ff  0x00000000000000c2
0x7fffffffe038: 0x0000000000000100  0x0000000000000001

自从我使用64位系统以来,我就没有尝试过长时间强制转换,我认为默认长时间为64位。谢谢+1@Whome实际上,在我的系统上,
long
默认为64位。我想我们得到至少64位的唯一保证是使用
long
(gdb) x/8xg  
0x7fffffffe008: 0x0000000000400e44  0x00007ffff7fe3000
0x7fffffffe018: 0x0000000000000000  0x0000000000000000
0x7fffffffe028: 0x0000000000f0b5ff  0x00000000000000c2
0x7fffffffe038: 0x0000000000000100  0x0000000000000001