如何在LLDB中创建std::string变量?解决命名空间类型找不到报错
为什么LLDB中创建std::string变量会报错?怎么解决?
你碰到的这个报错,核心原因是LLVM的libc++标准库使用了inline namespace做版本隔离。我们在代码里写的std::string,实际上是libc里std::__1::string的别名——因为libc用inline namespace __1把实际的实现包裹起来了,编译代码时编译器会自动把std::string映射到std::__1::string,但LLDB在调试时直接解析的是底层的实际类型,所以它找不到std::string这个“表层”别名,只会认识实际的std::__1::string类型,这就是为什么你打印现有变量时看到的是std::__1::string。
下面是几种可行的解决方法:
直接使用实际命名空间创建变量
既然LLDB认std::__1::string,那直接写完整的类型名就行:expr std::__1::string $name = "Foo"执行后就能正常使用这个临时的
$name变量。先导入libc++的实际命名空间
如果不想每次都写长长的std::__1::,可以先在LLDB里导入这个命名空间:expr using namespace std::__1;之后就可以像你最初想的那样创建变量了:
expr std::string $name = "Foo" # 甚至直接写string也可以 expr string $name = "Bar"给
std::string设置类型别名(一劳永逸)
用LLDB的type alias命令给std::string绑定实际类型,之后调试时就不用重复操作:type alias std::string = std::__1::string设置完成后,直接执行你最初的命令就不会报错了:
expr std::string $name = "Foo"
内容的提问来源于stack exchange,提问作者Londerson Araújo
相关产品推荐
相关产品推荐

