Как исключить встроенную / системную функцию во время анализа функции 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" или других (системных) заголовочных файлов?
Заранее спасибо!!!
1 ответ
Решение
Когда вы посещаете функцию, проверьте, находится ли ее местоположение (startLoc или endLoc) в системном заголовке, используя SourceManagers api 'isInSystemHeader(loc)'
например:
Bool VisitFunctionDecl(FunctionDecl * D)
{
If(sourceManager.isInSystemHeader(D->getLocStart()))
return true;
}
Спасибо, Хемант