这是测试代码。
#include <string>
int main(int argc, char const *argv[]) {
std::string a = "hello";
std::string b = "world";
return 0;
}
我用命令编译它:
clang++ test.cpp -g
然后我试着调试它:
lldb a.out
我在a = "hello"
运行后的第4行添加break。我尝试打印a
通过p a
,它显示我以下错误:
error: incomplete type 'string' (aka 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >') where a complete type is requ
ired
note: forward declaration of 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >'
error: 1 errors parsing expression
我不知道。
虽然当我尝试用g++编译时,它没问题。
2条答案
按热度按时间gywdnpxw1#
这是因为clang没有发出
std::string
的调试信息。确保你安装了libstdc的调试信息。请参阅invalid bug了解更多信息:看起来你没有安装libstdc的调试信息:
缺少单独的调试,用途:dnf debuginfo-install libgcc-5.1.1-4.fc22.x86_64 libstdc++-5.1.1-4.fc22.x86_64
Clang没有发出std::string的调试信息,因为它被告知libstdc++提供了它(但在您的情况下,它没有安装);这是一个调试大小优化,GCC显然不执行。
6l7fqoea2#
尝试使用-glldb而不是-g进行编译,它使用lldb的优化的degub信息进行编译