当前位置: 首页 > 知识库问答 >
问题:

clang - Clang libtooling 中 VarDecl 节点对于 string 类型显示为 invalid 的调试与解决?

屠坚壁
2024-07-19

我用llvm libtooling编程,代码里解析一个cpp文件,遍历var,打印ast节点信息,如下第二段代码,string类型ast是invalid,int类型ast节点是正确的为什么呢。被解析的cpp code包含string头文件了,第三段代码

bool Visitor::VisitVarDecl(VarDecl *VD)
{

SourceLocation srcLoc = VD->getLocation();

if (srcMgr.isInSystemHeader(srcMgr.getExpansionLoc(VD->getBeginLoc()))) {
    return true;
}

if (srcMgr.getFileCharacteristic(srcLoc) == SrcMgr::C_System ||
    srcMgr.getFileCharacteristic(srcLoc) == SrcMgr::C_ExternCSystem) {
    return true;
}
VD->dump();
return true;

}
'''

'''
VarDecl 0x55d65df37a68 </root/h30038243/k30056123/test/tmp_case5/e.cpp:16:2, col:14> col:14 invalid s2 'std::string':'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >'

VarDecl 0x55d65df37b18 </root/h30038243/k30056123/test/tmp_case5/e.cpp:17:2, col:9> col:9 invalid s1 'std::string':'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >'

VarDecl 0x55d65df37ba8 </root/h30038243/k30056123/test/tmp_case5/e.cpp:18:2, col:9> col:9 invalid s3 'std::string':'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >'

VarDecl 0x55bda4199000 </home/cpp_parser/llvm-project-llvmorg-15.0.4/clang/tools/syn-analyze/test/tmp_case5/e.cpp:20:2, col:10> col:6 a 'int' cinit
`-IntegerLiteral 0x55bda4199068 <col:10> 'int' 1
'''
'''

#include "e.h"
#include <memory>
#include <string>
using namespace std;
int main(int argc, const char *argv[]){
    std::string s2 = "abc";
    string s1 = func();
    string s3 = "a";
    int a = 1;
    int b = func2();
    int64_t c = 2;
    return 0;
}
why VD->dump() show string invalid vartype? but int type show no invalid

没尝试,无解决思路

共有1个答案

臧俊杰
2024-07-19

添加环境变量就可以了

export CPLUS_INCLUDE_PATH=/home/cpp_parser/llvm-project-llvmorg-15.0.4/build/lib/clang/15.0.4/include
 类似资料:
  • 我已经编写了一个程序,允许我输入业务或个人联系人,然后能够查看他们。我为不同类型的联系人使用了子类。当我查看联系人时,我希望能够看到他们是商务还是私人,但还没有找到正确的方法。我已经包括了一段代码,显示了我是如何输入它们的,以及我调用什么来查看它们的。 因此,现在当我查看一个我添加的联系人时,我看到的是名字、姓氏、地址、电子邮件、电话,然后取决于联系人的类型—出生日期(个人)或职位和组织(业务)。

  • 我正在尝试开发一个消息传递应用程序,它总是抛出一个异常 类型_InternalLinkedHashMap 当我试图给信息的背景颜色。它还表明 renderflex溢出99335像素 在列表中而不是列表中使用MessageBubble时。

  • 本文向大家介绍Python中的类与类型示例详解,包括了Python中的类与类型示例详解的使用技巧和注意事项,需要的朋友参考一下 1.经典类与新式类 在了解Python的类与类型前,需要对Python的经典类(classic classes)与新式类(new-style classes)有个简单的概念。 在Python 2.x及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位

  • 本文向大家介绍详解Swift中的Characters字符类型与String字符串类型,包括了详解Swift中的Characters字符类型与String字符串类型的使用技巧和注意事项,需要的朋友参考一下 一、引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的

  • 我想看看在phpUnit运行期间当前执行哪个测试。 我使用参数,但仍然只得到点: : 这是什么原因呢?

  • 我是一个新手,我需要从api读取数据并存储在列表中,但我得到的错误类型“\u TypeError”不是“String”类型的子类型,请帮助我 }