如何在GDB中将calloc创建的字符串数组转为可正常查看的格式?
解决GDB中查看动态字符串数组的问题
问题原因
静态数组word_list2是连续内存块,而动态创建的word_list是指针数组:每个元素是独立分配的字符串内存的指针,内存布局完全不同。直接用(char[2][21]) word_list转换,会把指针的二进制值当成字符解析,自然出现乱码。
正确查看方法
方法1:使用GDB的@操作符打印指针数组
直接将word_list视为指针数组,指定要查看的元素数量:
print *word_list@2
GDB会显示每个指针指向的字符串内容,效果接近静态数组的查看体验。
方法2:强制转换为指针数组类型
显式转换为对应长度的指针数组,再查看每个元素:
print (char*[2])word_list
此命令会展开显示两个指针指向的字符串,和静态数组的显示格式一致。
方法3:用x命令直接查看字符串
使用x命令指定格式为字符串(s),并指定数量:
x/2s word_list
该命令会直接输出两个字符串的内容,简洁直观。
方法4:自定义类型简化查看
如果需要多次查看,可在GDB中定义对应类型:
typedef char str21[21]; print *(str21**)word_list@2
这样GDB会按照21字符长度的字符串类型来解析每个指针指向的内存。
内容的提问来源于stack exchange,提问作者user97662
相关产品推荐
相关产品推荐

