gpt4 book ai didi

c++ - 为什么 gdb 中的打印命令会为 C++ std::strings 返回\035?

转载 作者:可可西里 更新时间:2023-11-01 18:15:20 28 4
gpt4 key购买 nike

假设我有代码:

std::string str = "random";

function(str);

void function (std::string str)
{
std::cout << str << std::endl;
}

如果我在 gdb 中逐步执行这段代码,然后进入函数并执行 p str,它会打印出类似这样的内容 \362\241 但 cout 会向屏幕打印正确的字符串 random。有没有人见过这个如果是的话我该怎么办?我在 gdb 中使用的 print 命令是错误的还是它与编译器解释字符串的方式有关?

最佳答案

无论出于何种原因,GDB 都可能缺少 STL 的调试信息。使用Employed Russian's example使用 g++ (GCC) 4.3.4 20090804 (release) 1 和 GNU gdb 6.8.0.20080328-cvs (cygwin-special),我得到以下输出:

(gdb) p str
$1 = {static npos = <optimized out>,
_M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<
No data fields>}, <No data fields>}, _M_p = 0x28cce8 "$▒▒"}}

这是对 std::string 中原始数据字段的解释。要获取实际的字符串数据,我必须将 _M_p 字段重新解释为指针:

(gdb) p *(char**)str._M_dataplus._M_p
$2 = 0xd4a224 "random"

关于c++ - 为什么 gdb 中的打印命令会为 C++ std::strings 返回\035?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830279/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com