llvm:CallGraphNode 给出了错误的函数名称

llvm : CallGraphNode giving incorrect function Name

我正在尝试遍历 llvm 中的调用图。一旦我在调用图中获得一个节点,我就会尝试打印与该调用图节点对应的函数名称以及引用数。

结果: 1)函数名始终为空字符串。 2)引用数始终是一个随机数。 3)调用的函数名也是空字符串。

代码: bool runOnModule(llvm::Module &M) 覆盖 {

    CallGraph cg = CallGraph(M);
    cg.dump();// this is correct. It is printing the expected the call graph

    for ( CallGraph::const_iterator itr = cg.begin(), ie = cg.end() ; itr != ie; itr++)
    {
       if (itr->second != nullptr)
       {
            itr->second->dump();
            errs()<<"-----------CGN---------\n";
            CallGraphNode *cgn = itr->second.get();



            if(const Function* fptr = cgn->getFunction())
            {
                errs()<<"Number of references are"<<cgn->getNumReferences()<<"\n";

                errs()<<fptr->getName()<<"\n";


                if(cgn->operator[](0) != nullptr)
                {

                    if(cgn->operator[](0)->getFunction() != nullptr)
                    {
                        errs()<<cgn->operator[](0)->getFunction()->getName()<<"\n";
                    }

                 }
              }
         }
   }

}

尝试添加 -DNDEBUG 编译标志。我遇到了同样的问题,它有所帮助。 如果您使用的是 cmake,则可以将以下行添加到 CMakeLists 文件:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNDEBUG")