ねえ、指定された .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 関数を呼び出すと、各ノードの出力が出力されます。なぜこれが起こるのか誰か教えてもらえますか?と思います。