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")
我正在尝试遍历 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")