我想在GDB中打印C字符串的全长。默认情况下它是缩写的,我如何强制GDB打印整个字符串?
tzdcorbm1#
set print elements 0
GDB手册:set print elementsnumber-of-elements设置GDB打印数组元素的数量限制。如果GDB正在打印一个大数组,它会在打印完set print elements命令设置的元素数后停止打印。此限制也适用于字符串的显示。当GDB启动时,这个限制被设置为200。将number-of-elements设置为零表示打印不受限制。
set print elements
number-of-elements
wmvff8tz2#
只要你的程序处于正常状态,你也可以使用call (void)puts(your_string)将它打印到标准输出。实际上,相同的原则适用于调试器可用的所有函数。
call (void)puts(your_string)
nxowjjhe3#
printf命令将打印完整的字符串:
printf
(gdb) printf "%s\n", string
tkclm6bt4#
还有第三种选择:x命令,允许您为特定命令设置不同的限制,而不是更改全局设置。要打印字符串的前300个字符,可以使用x/300s your_string。输出可能有点难以阅读。例如,打印SQL查询结果:
x/300s your_string
(gdb) x/300sb stmt.c_str() 0x9cd948: "SELECT article.r"... 0x9cd958: "owid FROM articl"... ..
mfuanj7w5#
只是为了完成它:
(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}
如果您想通过它们的值进行调试,
ax6ht2ek6#
使用set elements ...并不总是最好的方法。如果有一个不同的set string-elements ...,这将是有用的。因此,我在.gdbinit中使用这些函数:
set elements ...
set string-elements ...
define pstr ptype $arg0._M_dataplus._M_p printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p end define pcstr ptype $arg0 printf "[%d] = %s\n", strlen($arg0), $arg0 end
注意事项:
6条答案
按热度按时间tzdcorbm1#
GDB手册:
set print elements
number-of-elements
设置GDB打印数组元素的数量限制。如果GDB正在打印一个大数组,它会在打印完set print elements
命令设置的元素数后停止打印。此限制也适用于字符串的显示。当GDB启动时,这个限制被设置为200。将number-of-elements
设置为零表示打印不受限制。wmvff8tz2#
只要你的程序处于正常状态,你也可以使用
call (void)puts(your_string)
将它打印到标准输出。实际上,相同的原则适用于调试器可用的所有函数。nxowjjhe3#
printf
命令将打印完整的字符串:tkclm6bt4#
还有第三种选择:x命令,允许您为特定命令设置不同的限制,而不是更改全局设置。要打印字符串的前300个字符,可以使用
x/300s your_string
。输出可能有点难以阅读。例如,打印SQL查询结果:mfuanj7w5#
只是为了完成它:
必须给予长度,但可以更改该字符串的表示形式:
如果您想通过它们的值进行调试,
ax6ht2ek6#
使用
set elements ...
并不总是最好的方法。如果有一个不同的set string-elements ...
,这将是有用的。因此,我在.gdbinit中使用这些函数:
注意事项: