【发布时间】:2025-12-08 12:20:01
【问题描述】:
我正在尝试使用 gdb 检查内存中的 long double 数组,这可能吗?我不知道 x 甚至 p 命令使用什么后缀?
例如我有(气体语法):
array: .tfloat 5, 6, 7
fldt array
fldt array+10
fldt array+20
在 gdb 中,我可以直接从浮点堆栈打印这些值:
(gdb) p $st0
$4 = 7
(gdb) p $st1
$5 = 6
(gdb) p $st2
$6 = 5
但我无法找到一种方法来仅使用数组地址检查所有这些值,就像这样:
(gdb) x/4gf &array
0x4000b0 <array>: -1,4916681462400413e-154 8,0952656071088246e-320
0x4000c0 <array+16>: 5,3055561114210832e-315 1,3063763415981806e-9
(我知道为什么这个不起作用,因为 'g' 表示 8 个字节)
我当然可以通过一些演员和变通来手动访问这些。
(gdb) p *(long double*)(*(array))
$11 = 5
(gdb) p *(long double*)(*(array+10))
$12 = 6
(gdb) p *(long double*)(*(array+20))
$13 = 7
(gdb) p *(long double*)(*(array))+1
$21 = 6
(gdb) p *(long double*)(*(array))+2
$22 = 7
但我希望我在文档中遗漏了一些东西,并且有一种更简单的方法可以打印出完整的数组,而不是打印每个元素,我有一个包含更多元素的数组需要不时检查。
gdb --version
GNU gdb (Gentoo 7.7.1 p1) 7.7.1
【问题讨论】:
标签: arrays assembly floating-point gdb x86-64