GDB 打印大小不一致的静态数组

Posted

技术标签:

【中文标题】GDB 打印大小不一致的静态数组【英文标题】:GDB printing inconsistent size with large static array 【发布时间】:2020-04-27 23:50:42 【问题描述】:

我发现 GDB (GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git) 在打印大型、静态分配、固定大小的数组时出现以下问题:

(gdb) p &buf
$1 = (char (*)[52428800000]) 0x15491f84e000 <buf>
(gdb) p sizeof(buf)
$2 = 889192448

我还在相应的 C++ 程序中尝试了printf("%ld", sizeof(buf));,它打印出52428800000,正如我所期望的那样。

这是预期的行为吗? GDB 打印的较小值是多少?

【问题讨论】:

您声明了一个 50gb char 数组?感人的。你的机器有多少 GB 的 RAM? 大约 63G (ec2 m4.4xlarge)。虽然您可以声明一个由虚拟内存支持的大型静态数组。 【参考方案1】:

我在发布后就发现了——问题似乎是 gdb 默认为 sizeof 的 int32 输出——printf("%d", sizeof(buf)) 打印 889192448。我会考虑提交错误报告。

【讨论】:

以上是关于GDB 打印大小不一致的静态数组的主要内容,如果未能解决你的问题,请参考以下文章

array_multisort():数组大小不一致

如何使用 gdb 为 Fortran 程序打印数组大小(绑定)

vfp报表打印出现打印预览不一致的情况

针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案

ggsave 和 gganimate 的“动画”中符号的大小一致

Lodop某个电脑打印内容大小有问题