我用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 col:14 invalid s2 'std::string':'std::__cxx11::basic_string, std::allocator >' VarDecl 0x55d65df37b18 col:9 invalid s1 'std::string':'std::__cxx11::basic_string, std::allocator >' VarDecl 0x55d65df37ba8 col:9 invalid s3 'std::string':'std::__cxx11::basic_string, std::allocator >' VarDecl 0x55bda4199000 col:6 a 'int' cinit `-IntegerLiteral 0x55bda4199068 'int' 1 ''' ''' #include "e.h" #include #include 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 没尝试,无解决思路