更改 gdb 显示未初始化数据的方式

Change the way gdb displays uninitialized data

我正在调试一个程序,该程序声明了一个包含 1024 个元素的数组,但它直到很久以后才被初始化。每次我使用“info locals”时,它都会向我显示这个非常长的未初始化数据列表。有什么办法可以改变 gdb 呈现未初始化变量的方式吗?类似于 lot_data[1024]=UNINITIALIZED.

Is there any way to change the way that gdb presents uninitialized variables?

没有

GDB 不知道内存位置是否已经分配。对于 GDB,它只是位,并且它不能根据值的来源(它不知道)以不同方式显示位。

P.S。实际上可以通过检测 (clang -fsanitize=memory -fsanitize-memory-track-origins ...) 跟踪位的状态,但这是一件相当昂贵的事情。

还要考虑到尽管分配了内存,内存仍可能保持未初始化状态:

int buf[5];                     // uninitialized memory declared
int k = buf[0];                 // k is still uninitialized
 
int *ip = malloc(sizeof(buf));  // uninitialized memory created
memcpy(buf, ip, sizeof(buf));   // buf is still uninitialized, despite being written to
int j = buf[0];                 // j is still uninitialized