问题标签 [libtooling]

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 回答
940 浏览

clang - 使用 clang libtooling 打印源代码 Stmt 的行号

您好,我正在使用 clang libtooling。我需要一个 .c 文件并打印所有存在的函数的名称和函数声明所在的行。在 ASTRecursive 类中,我有函数 VisitFunctionDecl 并找到了函数,但很困惑如何找到斯坦茨。

0 投票
1 回答
396 浏览

c++ - 如何使用 Clang Libtooling 在终端上打印一行?

我对 CLang 和 Libtooling 比较陌生。我想在终端上显示源代码中的一行。我在RecursiveASTVisitor中有一个 *VisitFunctionDecl(FunctionDecl func)。对于每个函数,我得到SourceRange并从中得到SourceLocation。但我不明白如何显示。我有事要做

0 投票
1 回答
325 浏览

c++ - 在命令行中指定的某些文件上运行 ClangTool

我正在使用 Clang Libtooling。我需要在命令行中指定的某些文件上运行我的 clang MyFrontendAction。

我运行它:

它在file1和file2上运行我的工具。我只想让它在 file1 上运行,并想在 file2 上做一些其他的事情。我该怎么做?

0 投票
1 回答
664 浏览

c++ - CLang LibTooling 处理函数模板参数

我想以不同的方式处理模板参数,因此对于代码:

我想知道 param 是模板专业化并可以访问它的参数。

所以我写了一个ASTVisitorwith 函数

但这些演员nullptr总是 - 我从来没有得到template param found输出。

我究竟做错了什么?有没有其他方法可以将 t 转换为允许检查模板参数的类型之王?

0 投票
1 回答
422 浏览

c++ - 如何使函数的 LLVM IR 可用于我的程序?

我正在开发一个库,我希望可以使用某些自省功能。假设我正在使用 clang 进行编译,所以我可以访问 libtooling 或其他任何东西。

我特别希望有人能够将已编译函数的 LLVM IR 作为程序的一部分查看。我知道,在编译时,我可以使用 -emit-llvm 来获取 IR。但这会将其保存到文件中。我想要的是 LLVM IR 嵌入到程序本身并可以从程序本身中检索——例如 my_function_object.llvm_ir()

这样的事情可能吗?谢谢!

0 投票
1 回答
1237 浏览

clang - Clang libtooling:确定宏扩展位置

我有一个header.h带有宏定义的标题,它扩展为一个类定义和一个test.cpp包含header.h并使用这个宏的源文件。然后我用RecursiveASTVisitor访问所有CXXRecordDecl的。

当我访问作为宏扩展的 CXXRecordDecl(在 test.cpp 中)并查询它SourceLocationdump()它时,位置指向header.h- 宏定义的位置。

我需要为这个 CXXRecordDecl 获得的是SourceLocation宏扩展 - 在我的情况下它应该是test.cpp

提前致谢。

0 投票
1 回答
234 浏览

c++ - 为什么当类包含虚方法时,clang 会创建这些隐式方法?

我正在开发一个基于 clang 的 AST 的工具,我很想知道为什么 clang 会这样工作。

这是我的输入。我有一个非常简单的类,定义如下:

然后在我的 RecursiveASTVisitor 中,我的代码如下所示:

所有这一切都是吐出在所有被访问的类中定义的方法列表。输出如我们所料:

现在,让我们对 Foo 类做一个小改动。让我们将 foo() 方法设为虚拟:

现在我的输出改变了:

我的问题是,为什么向类添加虚拟方法会导致 clang 创建隐式赋值运算符和析构函数?如果我添加 --std=c++11,它也会创建一个隐式移动赋值运算符。这是 clang 的实现细节,还是 C++ 标准的一部分?

0 投票
3 回答
2447 浏览

visual-studio - 如何在 Visual Studio 中使用 LibTooling/Clang?

我正在尝试使用 LibTooling 替换 C 代码文件中的函数和变量名称。因此,我下载了 llvm 并按照说明使用 GMake 和 Visual Studio 2015 在 Windows 中进行设置。

我想学习很多教程(例如这个),但它们都假设您使用的是 Linux/Make,因此它们提供了一个 Makefile,它以某种方式管理与 llvm 源代码的集成。

我想做的是在 Visual Studio 中使用这些示例,但我不知道从哪里开始 - 我可以在给定的 (llvn.sln) 解决方案中创建一个新项目并在那里添加代码吗?如何告诉 Visual Studio 包含 clang 源(如我提到的那些 Makefile 中所定义)?

0 投票
1 回答
100 浏览

c++ - 使用 libtooling 测试类是否可复制构造

我想libtooling用来测试 a 定义的是否CXXRecordDecl是可复制构造的。

我已经尝试过:

  • hasCopyConstructorWithConstParam()
  • hasTrivialCopyConstructor() || hasNonTrivialCopyConstructor()

不幸的是,true如果类的复制构造函数被隐式删除,这两个表达式都会返回。如果类继承自不可复制的类或具有不可复制的成员变量,则可能会发生这种情况。

测试一个类是否可复制构造的逻辑很重要,并且必须存在clang. 如何测试一个类是否可以复制构造libtooling

0 投票
1 回答
679 浏览

clang - 如何在 Clang LibTooling 中获取语句的名称?

我正在玩 LibTooling:我想要做的是输出源文件中所有变量的所有位置。

为了找到所有出现的变量,我重载了 RecursiveASTVisitor 和方法“bool VisitStmt(Stmt)”(见下文),但现在我不知道如何输出变量的名称。目前,我的代码只输出“DeclRefExpr”,但我想要类似“myNewVariable”或我在输入文件中定义的任何内容。

我怎样才能得到名称,即语句本身?通过使用源管理器并从原始源代码中提取它?