c++ - 如何使用 Clang 获取 C/C++ 程序的所有全局声明的列表?

标签 c++ c clang llvm

我正在尝试使用 Clang 编写一个程序,列出 C 或 C++ 程序的所有公开导出的变量和函数。

我关注了 this tutorial 的第 05 部分,但它不适用于当前版本的 clang。除此之外,我得到了 some hints CompilerInstance 可以使代码更短,但我不完全确定如何使用它。

您将如何实现此功能?你能给我一些正确方向的指示吗?例如:是否存在全局声明变量的大型哈希表,或者我是否必须遍历 AST?

最佳答案

公开导出 - 您是指具有外部链接的符号吗?

您可以使用nm在目标文件、共享库和可执行文件上使用 --extern-only --define-only --demangle 选项来显示具有外部链接的已定义符号。符号类型字段告诉您它是什么类型的符号,全局变量通常具有类型 B、b、C、D、d、G、g、R、r、S、s 和 W、w,用于在中声明的模板的静态数据成员头文件和函数范围的静态信息。

关于c++ - 如何使用 Clang 获取 C/C++ 程序的所有全局声明的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32026298/

相关文章:

c - AVR 模拟器中的意外指针重新分配

c - 是否仍然值得在 OpenMP 实现上投入时间?

c - free() 是否将内存归零?

c++ - 为什么 std::weak_ptr 没有 operator->?

c++ - mmap 大小调整为上一页边界

c++ - 尝试在 64 位数据类型上运行简单的模板化内核时出现 cudaErrorLaunchFailure

c - 如何通过数组使用 MPI 分散和聚集

c - 使用 informix (.ec/esql) 在 C 中哪个更快 "where col = ? or col = ? or col = ?"或 "where col in (?, ?, ?)"?

c++ - LLVM cmake安装找不到DIA SDK

C++ 和 Qt : observer pattern error