如何通过 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;
}
谢谢,
赫曼
我正在尝试使用 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;
}
谢谢, 赫曼