如何通过 clang libtooling 在功能分析期间排除内置/系统功能

How to exculde build-in / system function during function analysis by 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" 文件或其他(系统)头文件中删除所有这些 built-in/system 函数?

提前致谢!!!

当您访问一个函数时,使用 SourceManagers api 'isInSystemHeader(loc)'

检查它的位置(startLoc 或 endLoc)是否在系统 header 中

例如:

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

谢谢, 赫曼