我需要預處理一些C++文件來測試和分析自動插入代碼,我需要與鐺API做到這一點。處理C++鏗鏘API函數來插入代碼
現在,我希望能夠做到以下幾點: 如果有一個函數:
int SomeFn(int a, int b, int c) {
doStuff();
}
我想預處理它,它看起來像這樣:
int SomeFn(int a, int b, int c) {
cout << "SomeFn is invoked with the following arguments: a=" << a << ", b=" << b << ", c=" << c << endl;
doStuff();
}
我一直試圖擴大ASTConsumer
和使用方法HandleTopLevelDecl
和HandleTopLevelSingleDecl
和檢查通過Decls
是FunctionDecls
喪氣他們,這樣我就可以得到他們的名字和身體位置。 但我無法處理類方法,只有全局函數。
我發現HandleTagDeclDefinition(TagDecl* D)
的ASTConsumer
類的功能。文檔說:每次 TagDecl
此回調被調用(例如結構,聯合,枚舉類 )結束。
但是看起來這種方法甚至沒有被調用,當我測試它。
所以我的問題是,什麼是做這項工作的正確方法?以及C++類如何在clang API中表示?也許有人知道,我可以在哪裏找到示例,因爲clang API的記錄很差。
UPDATE:
我知道有也是Visitors
的概念,有一個方法VisitRecordDecl(RecordDecl *D)
。該文檔說RecordDecl
表示類。所以我延長RecursiveASTVisitor
實施VisitRecordDecl(RecordDecl *D)
,但現在看來,這種方法不會調用都不是。 相反VisitVarDecl
被調用,當一個類定義是發現,因爲如果它被看作是一個變量聲明。 所以我有點困惑。我希望有人能夠幫助...
UPDATE2:
我試圖解析另一個文件,這一次鐺找到一個RecordDecl
。但文件中定義一個struct和兩班,所以我覺得我的鐺代碼分析℃,而不是C++。在C和C++之間切換是否有任何設置?
「因爲叮噹API的記錄很差。」對於開源軟件,文檔相當不錯。有一個在http://clang.llvm.org/docs/UsersManual.html用戶手冊和API在由doxygen的在http://clang.llvm.org/doxygen/index.html自動生成。你還能想要什麼? –
該手冊是爲編譯器,我不需要和doxygen的文檔是有幫助的,如果你知道如何鏗鏘的作品,但我不知道。 –
本技術文件概述了可能在概念上更易於理解的非Clang方法:「簡化分支覆蓋」http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf分支覆蓋是一種測試覆蓋;本文討論如何使用相同的想法進行分析。 –