Formatting 在用GDB调试Rust程序时,如何使用格式打印?

Formatting 在用GDB调试Rust程序时,如何使用格式打印?,formatting,gdb,rust,Formatting,Gdb,Rust,当我尝试使用字符串格式打印时,就像在C中调试时一样,我会遇到一个转换错误: (gdb)printf“%s\n”、“你好,世界” 值无法转换为整数。 预期: (gdb)printf“%s\n”、“你好,世界” $2=“你好,世界” 诊断信息: $rust gdb-v GNU gdb(gdb)7.12.1 ..... 使用printf时,它希望表达式为数字或数字 指针。从 printf模板,表达式 表达式用逗号分隔,可以是数字或指针 如果我用gdb的ptype命令检查了“hello world”

当我尝试使用字符串格式打印时,就像在C中调试时一样,我会遇到一个转换错误:

(gdb)printf“%s\n”、“你好,世界”
值无法转换为整数。
预期:

(gdb)printf“%s\n”、“你好,世界”
$2=“你好,世界”
诊断信息:

$rust gdb-v
GNU gdb(gdb)7.12.1
.....

使用
printf
时,它希望表达式为数字或数字 指针。从

printf模板,表达式

表达式用逗号分隔,可以是数字或指针

如果我用gdb的
ptype
命令检查了
“hello world”
的类型,我会注意到它是一个对象,而不是一个数字或指针

(gdb)p键入“hello world”
type=struct&str{
数据ptr:u8*,
长度:usize,
}
要解决此问题,请将参数更改为名为
data\u ptr
的字符串属性

(gdb)p键入“hello world”。数据\u ptr
类型=u8*
(gdb)p“你好,世界”。数据
$14=(u8*)0x101100080“你好,世界\000”
返回
数据\u ptr
应该有效,因为它是一个指针(
u8*
),并且指向一个作为字符串开头的地址

(gdb)打印“%s\n”,“你好,世界”。数据\u ptr
你好,世界

请注意不要与
打印混用,因为这不起作用

(gdb)打印“%s\n”、“hello world”。数据\u ptr
无法将字符转换为“UTF-8”字符集

无法保证
数据\u ptr
会被NUL终止,因此在最坏的情况下,这可能会失败。