嘿,我试图生成给定 .c 或 .cpp 文件的调用图。我写了一个clang插件来生成调用图。我写了以下函数。
class CGASTActionConsumer:public ASTConsumer{
CallGraph *CG;
public:
CGASTActionConsumer(CallGraph *inCG):CG(inCG){}
virtual bool HandleTopLevelDecl(DeclGroupDef DG)
{
for(DeclGroupRef::iterator i=begin(),e=end();i!=e;++i)
{
if(FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
{
if(/* check function is valid for insertion to graph */)
CG->addToCallGraph(FD,FD->isGlobal()); // add node in call graph
}
}
}
};
当我尝试从外部 HandleTopLevelDecl 函数打印图形时,它不会打印任何东西。但是当我从 HandleTopLevelDecl 函数中调用 print 函数时,它将打印每个节点的输出。谁能告诉我为什么会这样?谢谢。