如何在 gdb 中打印长字符串的完整值
How do I print the full value of a long string in gdb?
我想用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)
将其打印到标准输出。实际上,相同的原则适用于调试器可用的所有函数。
> printf
命令将打印完整的字符串:
(gdb) printf "%sn", string
还有第三个选项:x 命令,它允许您为特定命令设置不同的限制,而不是更改全局设置。要打印字符串的前 300 个字符,可以使用 x/300s your_string
。输出可能有点难以阅读。例如,打印 SQL 查询会导致:
(gdb) x/300sb stmt.c_str()0x9cd948:"选择文章.r"...0x9cd958:"来自艺术的奥维德".....
只是为了完成它:
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfen"
您必须给出一个长度,但可以更改该字符串的表示形式:
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
如果要按其值进行调试,这可能很有用
使用set elements ...
并不总是最好的方法。如果有一个独特的set string-elements ...
,那将是有用的。
因此,我在我的.gdbinit中使用这些函数:
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %sn", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %sn", strlen($arg0), $arg0
end
警告:
- 第一个依赖于 c++ lib,因为它访问 std::string 的成员,但很容易调整。
- 第二个只能在正在运行的程序上使用,因为它调用 strlen。
相关文章:
- 有没有办法将字符串打印为文字?
- 如何通过标准字符串打印 ostream 变量的值?
- 这个随机字符串打印代码有什么问题?
- 比较 C++ 字符串打印中的两个整数数组
- 在C++中从后缀表达式字符串打印单个操作
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++字符串到字符串打印不正确,无法获取 unicode 路径
- 如何从数组 c++ 中的字符串打印第 N 个字符
- 将 LPCWSTR 字符串打印到文件
- C++正在将DWORD_PTR*字符串打印到文件中
- 使用#define字符串打印f和警告
- 使用格式字符串打印类
- 如何将字符转换为字符串,并从字符串打印到main函数
- 将vector中结构体的成员字符串打印到cout流
- fprintf() / std::cout 不会将部分字符串打印到 stdout/stderr
- 为什么ostream为定义为' volatile char[] '的字符串打印' 1 ' ?
- c++文件读取和字符串打印
- 如何使用一个字符串打印此unicode行
- 按字符串打印日期
- 如何用c++将字符串打印到控制台