问题标签 [libclang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
371 浏览

c++ - lib clang.dylib:更改安装路径

我在使用 libclang 时遇到问题:

我在本地构建了 libclang。它位于像 clang-llvm/.../libclang.3.4.dylib 这样的地方。

然后我使用那个dylib开发了一个基础工具。(确切地说:我将一个版本复制到我的项目文件夹并与之链接。)基础工具工作正常。但是,当然,在加载时它使用我本地构建文件夹中的 dylib。这是不可接受的,因为该工具的用户必须安装 clang 才能使用我的工具。

因此,我将 libclang.3.4.dylib 复制到 /usr/.../libclang.3.4.dylib 内的某个位置,并使用 install_name_path -id /usr/.../libclang.3.4.dylib /usr/.../libclang 将安装路径更改为该位置.3.4.dylib。

之后,我的工具在那里找到了 dylib,但由于解析器在文件中无法再找到 stdarg.h(由我的工具解析),因此无法正常工作。

如何将 libclang.3.4.dylib 的安装路径设置为公开的?

0 投票
2 回答
3767 浏览

c++ - 使用 libclang 检查通用属性

我想在下面的例子中解析类成员函数的通用属性:

使用 libclang C API,我想在源代码中区分foobar(并且知道foo具有interesting属性)。这可能吗?我很难找到解释 API 中使用的概念的示例或文档(我找到了一个参考资料,但是当没有解释这些概念时,这有点难以使用)。

0 投票
1 回答
1247 浏览

c++ - 如何使用 clang 获取单个 cpp 文件的 AST?

我知道如果没有标题,它永远不会完全准确,因为 C++ 不是上下文无关的。

使用'AB(C);'的经典例子,它意味着它可以被识别为函数声明或对象定义。任何一个对我来说都很好。我只需要完全解析的文件。

我对代码的语义分析不感兴趣,只是在语法和 AFAIK 中,clang 的语法是最好的之一。

问题是,在某些情况下,当它不知道类型时,clang 会避免一些声明,尽管我猜它可以正确解析它。

请参阅以下案例。class.cpp 的内容:

执行 clang 命令行应用程序:

它只是将构造函数和最后一个方法识别为 AST 节点。

有没有办法得到完整的 AST 树?

谢谢!

0 投票
1 回答
678 浏览

python - 使用libclang,回调函数不会递归遍历,不会访问所有函数

我正在关注一个显示 python 绑定限制的示例,来自站点http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/ 它直接使用“libclang 访问 API” .

输出显示所有调用的函数及其行号。

当我运行相同的代码时,我只得到输出

我使用的版本是带有 windows 的 llvm3.1(链接中建议的更改)。

我觉得,返回 2 不是再次调用回调函数。我什至尝试在节点上使用'get_children'并在没有回调的情况下遍历,我得到了相同的结果。

经过大量搜索和试验,我无法得到这种行为的原因。谁能解释一下?问候。

0 投票
2 回答
1609 浏览

c++ - libclang 返回太多关于函数声明的信息

我有以下使用 clang-c API 的代码。

此代码解析以下内容。

当程序运行时,我看到以下内容。

为什么我得到这么多的声明getSum(),而在代码中我只有一个声明?

0 投票
0 回答
113 浏览

c++ - 创建 CXIndex 后无法捕获异常

为什么这个程序

表现如预期,但这一个

崩溃?

更一般地说,一个函数可以做什么来导致后续异常不被捕获?

使用:visual c++ 10.0(尝试了不同的 /EH 标志),clang 3.4(使用相同的构建)

0 投票
1 回答
2891 浏览

c++ - CLang Libtooling:在 clang::VarDecl、clang::FieldDecl 或 clang::ParmVarDecl 中获取变量的数据类型

我正在研究 CLang 3.5。我正在尝试获取有关在 C++ 项目中声明的变量的信息。

如何获取 a或objectclang::VarDecl中变量的数据类型或限定类名?我试图找到一个函数,它可以在此处提供的文档中返回变量的数据类型或类名。clang::FieldDeclclang::ParmVarDeclclang::VarDecl

http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html

我还尝试查看代码,$LLVM/tools/clang/tools/clang-check/ClangCheck.cpp因为在传递 cmd arg--ast-dump时,它显示了有关每个 AST 节点的所有信息,包括声明的所有变量。我想知道如何访问所有这些信息。

ASTMatchers用来查找我的变量声明,它们是:

谁能告诉我如何获得所有变量的数据类型?

0 投票
1 回答
1571 浏览

libclang - 使用 libclang 解析多个文件时可以共享工作吗?

如果我在一个大型项目中有多个文件,所有文件都共享大量包含的头文件,有没有办法共享解析头文件的工作?我曾希望创建一个索引,然后向其中添加多个翻译单元可能会导致一些工作被共享 - 但是即使是(伪代码)行的代码

每次调用 parseTranslationUnit 似乎都花费了全部时间,性能并不比

我知道有专门的功能可以重新解析完全相同的文件;但是我真正想要的是解析“myfile1”和“myfile2”可以共享解析“myheader.h”的工作,而特定于重新解析的函数在那里无济于事。

作为一个子问题,重用索引和为每个翻译单元创建新索引之间是否有任何有意义的区别?

0 投票
0 回答
313 浏览

libclang - 无法在包含语句中的某些偏移处获取 CXCursor

鉴于此源文件为 test.cpp

如果我使用 clang_parseTranslationUnit() 使用 CXTranslationUnit_DetailedPreprocessingRecord 选项对其进行解析,我发现我的源文件中有一个 CXCursor,类型为 CXCursor_InclusionDirective,偏移量为 0 到偏移量 17。

如果我通过调用 clang_getLocationForOffset() 和 clang_getCursor() 获得一个 CXCursor 偏移量 0 到 9 我得到这个光标。对于偏移量 10 到 17,我得到一个 CXCursor 类型为 CXCursor_NoDeclFound。

我希望获得所有偏移量 0 到 17 的 CXCursor_InclusionDirective CXCursor。谁能解释为什么?(对于使用“”而不是 <> 的包含语句,问题似乎没有发生)

0 投票
1 回答
550 浏览

c++ - 如何检索类:带有clang的函数

我有一个CXCursor标记在 C++ 中声明函数的地方。我知道如何获取方法名称或 USR ......但是我怎样才能获取类名称(该方法是其中的一部分)

我用 libclang 解析的代码是:

当我尝试打印我使用的光标信息时:

如何获得“ParseObjectFace”(类名)?