Compiler construction 用于C+的LLVM中的函数传递+;输入

Compiler construction 用于C+的LLVM中的函数传递+;输入,compiler-construction,llvm,llvm-clang,Compiler Construction,Llvm,Llvm Clang,我试图通过LLVM解析代码,在我的C/C++代码中打印所有函数的名称。我引用了这里给出的例子 该示例对于C代码输入工作良好,但对于C++输入,它在一个简单的Hello World程序中显示以下函数名 __cxx_全局_变量_初始化 主要 全球 然后我发现LLVM与iostream之间存在某种问题,如下所述: 我从代码中删除了iostream,然后只得到“main”作为输出 但是对于一个多功能的C++程序,它包含了以下函数:CurrnPurm、FiffType和Maple(没有IoSoW),得到了

我试图通过LLVM解析代码,在我的C/C++代码中打印所有函数的名称。我引用了这里给出的例子 该示例对于C代码输入工作良好,但对于C++输入,它在一个简单的Hello World程序

中显示以下函数名 __cxx_全局_变量_初始化

主要

全球

然后我发现LLVM与iostream之间存在某种问题,如下所述:

我从代码中删除了iostream,然后只得到“main”作为输出

但是对于一个多功能的C++程序,它包含了以下函数:CurrnPurm、FiffType和Maple(没有IoSoW),得到了以下输出

_Z11转化率

_Z8FindTypes

主要

多功能C程序工作正常


有人能解决这个问题吗?

欢迎来到的精彩世界:)

您的前端(我猜是叮当声)已经重命名了这些函数,这是一个称为mangling的过程。如果您想恢复原来的函数名,则需要对损坏的名称进行demangle处理。你可以阅读这篇链接文章,了解更多关于为什么以及如何进行撕碎和撕碎的信息


据我所知,LLVM中没有内置的C++ Deangangle,但可以使用外部的,例如,

有没有办法阻止编译器进行编程?我的编译器是clang++。@RohanBhalla yes。使用
c++filt
工具转换损坏的名称。如果您只想打印来自源文件(而不是包含的头文件)的声明,请使用调试元数据。