gdb无法从我的字符数组中打印出可读内容

9
我是一名能翻译文本的助手。
我有一个char类型的缓冲区[100],我正在尝试使用gdb在运行时的各个阶段读取它的内容。
我使用p buffer,然后得到了:
"/*\000\000\000\000\000\000????X?o\000\025\202\004\b", '\0' <repeats 12 times>, ".N=?", '\0' <repeats 24 times>, "`\203\004\b\000\000\000\000L\227\004\bX????\202\004\b?\017\204\000\f?\203\000\210???i\205\004\b??r"

我该如何将p转换为可读格式?

3
确保缓冲区中有可打印(可读)数据?GDB会打印出存在的内容,而不是你期望的内容。目前,strcmp(buffer, "/*") == 0 - Jonathan Leffler
嗯,我肯定是新手,顺便说一句,为什么strcmp(buffer, "/") == 0很重要?显然,这个缓冲区中有比"/"更多的内容,所以对我来说,strcmp返回0似乎是显而易见的... - Tony Stark
1
是 "\000" 代表了 "null",它标志着 C 字符串的结尾。因此,将您的缓冲区视为包含 C 字符串,实际上包含字符串 "/*"(这就是 Jonathan Leffler 在他的 strcmp 方程中所指的 - 请注意,当字符串相同时,strcmp 返回 0)。 - Mike Dinsdale
哦,对了。由于某种原因,我以为它会返回1。不要紧……谢谢你们两个! - Tony Stark
2个回答

17

x/s buffer 应该显示数组内容作为以空字符结尾的字符串(我猜这是您想要的)。


是的,这比我的方法更好 - 减少了打字 :) - Mike Dinsdale

10

如果你想要去掉终止空字符后面的垃圾(这样你就只能看到这个字符串中的"/*"),你可以使用:

p (char*)buffer

目前 gdb 正在将您的变量打印为数组,因此它显示了全部100个字符;将其强制转换为 char* 会使其将其作为 C 字符串打印。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接