2017-07-08 37 views
0

我試圖使用clang libtooling分析函數。 這裏是我想分析的源代碼:如何使用clang libtooling在函數分析期間內置內置/系統函數

#include <stdio.h> 

int main(){ 
    int a = 100; 
    printf("a==%d", a); 
} 
當我跑我的工具,把所有的功能東方電氣在上述文件

,我發現有很多內置的/系統的功能,像:

decls: 
_IO_cookie_init 
__underflow 
__uflow 
__overflow 
_IO_getc 
_IO_putc 
_IO_feof 
_IO_ferror 
_IO_peekc_locked 
_IO_flockfile 
_IO_funlockfile 
_IO_ftrylockfile 
_IO_vfscanf 
_IO_vfprintf 
_IO_padn 
_IO_sgetn 
_IO_seekoff 
_IO_seekpos 
_IO_free_backup_area 
remove 
rename 
renameat 
tmpfile 
tmpfile64 
tmpnam 
tmpnam_r 
tempnam 
fclose 
fflush 
fflush_unlocked 
fcloseall 
fopen 

(我認爲他們是通過頭文件「stdio.h中」中介紹)

我的問題是: 我怎樣才能從「STDIO擺脫所有這些內置/系統功能.h「文件或其他(系統)頭文件?

在此先感謝!

+0

您的工具是否會查找已定義的函數或剛聲明和未定義的函數? – deLta

+0

@deLta謝謝你的回覆。目前,我只是尋找由程序員自己創建的函數的decl。 – ignorer

+0

@deLta順便說一句,獲取已定義函數的方法以及獲取已聲明和未定義函數的方法是不同的?我很好奇。有可能解釋一下它嗎?謝謝:) – ignorer

回答

2

當你訪問一個函數,檢查其位置(startLoc或endLoc)使用SourceManagers API在系統頭 'isInSystemHeader(LOC)'

如:

Bool VisitFunctionDecl(FunctionDecl * D) 
{ 
    If(sourceManager.isInSystemHeader(D->getLocStart())) 
     return true; 
} 

感謝, 與Hemant

+0

謝謝!有用! – ignorer