#include <iostream>
#include <string>
int main() {
std::string name = "Foo";
return 0;
}
当我要进行调试时,我想要设置一个
lldb
,就像我设置此std::string
::
int
我尝试:
expr int $num = 4
我得到了:
expr std::string $name = "Foo"
没有人了解发生了什么?如何在
error: no type named 'string' in namespace 'std'
?上创建一个
std::string
?
OBS: 当我打印lldb
时,lldb给我这种类型的name
std::__1::string
:
std::string
p foo
(std::__1::string) $2 = "foo"
从外面看起来很简单,但实际上是一个相当复杂的小野兽……您可以通过阅读字符串标题来更加努力,并且您发现您需要提供尺寸和分配器,然后进行类似:
std::string
失败,因为分配器到处都是内衬的,因此LLDB找不到构造函数。
真正的解决方案是让LLDB从标题中重建
std::string
模块,将最终的Clang模块导入LLDB的编译器,并使用它来创建这些值。 那时,我们将拥有完成这项工作所需的信息。 例如,我们会知道默认参数,并可以实例化模块中缺失的分配器。
但是,从C ++ STD标头构建一个叮当模块并不完全是微不足道的,因此我们仍在努力……
您可以使用:
expr std::string $myStr("Foo", 4, std::allocator<char>())
error: Couldn't lookup symbols:
__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1EPKcmRKS4_
expr const char * $foo