Как исключить встроенную / системную функцию во время анализа функции 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;
}

Спасибо, Хемант

Другие вопросы по тегам