更改 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
我正在调试一个程序,该程序声明了一个包含 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