c++ lldb无法调试字符串时,由clang++编译

zpgglvta  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(111)

这是测试代码。

#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++编译时,它没问题。

gywdnpxw

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显然不执行。

6l7fqoea

6l7fqoea2#

尝试使用-glldb而不是-g进行编译,它使用lldb的优化的degub信息进行编译

相关问题