我想在GDB中打印C字符串的全长.默认情况下它是缩写,如何强制GDB打印整个字符串?
set print elements 0
从GDB手册:
set print elements
number-of-elements
设置GDB数组元素的打印限制.如果GDB正在打印一个大型数组,它会在打印出该set print elements
命令设置的元素数后停止打印.此限制也适用于字符串的显示.当GDB启动时,此限制设置为200. 将元素数设置为零意味着打印无限制.
只要您的程序处于理智状态,您也可以call (void)puts(your_string)
将其打印到stdout.实际上,同样的原则适用于调试器可用的所有函数.
还有第三个选项:x命令,它允许您为特定命令设置不同的限制,而不是更改全局设置.要打印您可以使用的字符串的前300个字符x/300s your_string
.输出可能有点难以阅读.例如,打印SQL查询会导致:
(gdb) x/300sb stmt.c_str() 0x9cd948: "SELECT article.r"... 0x9cd958: "owid FROM articl"... ..
该printf
命令将打印完整的字符串:
(gdb) printf "%s\n", string
只是为了完成它:
(gdb) p (char[10]) *($ebx) $87 = "asdfasdfe\n"
您必须提供长度,但可能会更改该字符串的表示形式:
(gdb) p/x (char[10]) *($ebx) $90 = {0x61, 0x73, 0x64, 0x66, 0x61, 0x73, 0x64, 0x66, 0x65, 0xa}
如果要按值调试,这可能很有用