llvm:CallGraphNode给出错误的函数Name

时间:2017-07-13 07:02:02

标签: llvm llvm-ir call-graph

我试图遍历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";
                    }

                 }
              }
         }
   }

}

1 个答案:

答案 0 :(得分:1)

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

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