我想在GDB中打印c -字符串的完整长度。默认情况下是缩写,如何强制GDB打印整个字符串?


当前回答

只要你的程序处于正常状态,你也可以调用(void)puts(your_string)将它打印到stdout。实际上,同样的原则适用于调试器可用的所有函数。

其他回答

printf命令将打印完整的字符串:

(gdb) printf "%s\n", string

只要你的程序处于正常状态,你也可以调用(void)puts(your_string)将它打印到stdout。实际上,同样的原则适用于调试器可用的所有函数。

为了完成它:

(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}

如果您想通过它们的值进行调试,这可能很有用

set print elements 0

摘自GDB手册:

设置打印元素数量

对GDB将打印的数组元素数量设置限制。如果GDB正在打印一个大数组,它将在打印完set print elements命令设置的元素数量后停止打印。这个限制也适用于字符串的显示。当GDB启动时,这个限制被设置为200。将number-of-elements设置为0意味着打印是无限的。

还有第三个选项:x命令,它允许您为特定命令设置不同的限制,而不是更改全局设置。要打印字符串的前300个字符,可以使用x/300s your_string。输出可能有点难以阅读。例如,打印一个SQL查询结果:

(gdb) x/300sb stmt.c_str()
0x9cd948:    "SELECT article.r"...
0x9cd958:    "owid FROM articl"...
..