Member 12712046 Ответов: 1

Как использовать gcc для получения имени функции и номера строки исходного файла C/C++


Вот папка исходного кода проекта для c/c++, я хочу написать небольшой и быстрый инструмент/скрипт, чтобы получить имя файла, номер строки и имя функции для всех исходных файлов .

Например, я хочу, чтобы он выводился так, как показано ниже:

./ниц/а.линия c 1500 вызвать функцию func1(); ./ниц/а.линия c 1600 называть функцию func1();
./ниц/а.c строка 1700 вызвать функцию func2(); ./в src/б.линия c 1700 вызвать func3();
...


например, вот контекст tmp. c,я хочу, чтобы он проанализировал файл,


#include <stdio.h>
#include <string.h>  
int main (){   
        char dest1[4];   
        char dest2[4];   
        char *src="Sample string";   
        strcpy (dest2,strcpy(dest1,src));   
        printf ("src1: %s\ndest: %s\n",src,dest1);
        return 0;
 }

и вывод вроде :

. / tmp. c строка 7 вызов strcpy
. / tmp. c строка 8 вызов printf

Как это сделать с помощью каких-либо инструментов или языка? лучше всего с gcc.

Что я уже пробовал:

получить имя вызова функции и номер строки для файла.

Richard MacCutchan

Вам нужно написать анализатор кода/парсер. Google для этих условий, и вы найдете много информации.

Member 12712046

Спасибо за ваш ответ.Я думаю, было бы много работы, чтобы сделать это.Есть ли какой-нибудь способ сделать это простым и быстрым способом, например, основываться на gcc/ctags/cscope/... еще какие-нибудь инструменты?

Richard MacCutchan

Да, это будет много работы. Однако, если вы можете найти какой-то открытый исходный код, который уже выполняет часть работы, вы всегда можете адаптировать его.

1 Ответов

Рейтинг:
2

LaxmikantYadav

Вы можете использовать макросы C _ _ func_ _ и _ _ LINE_ _ пожалуйста, обратитесь к ссылке ниже для получения более подробной информации,
C макросы _ _ LINE__, _ _ FILE_ _ и _ _ func__[^]


Member 12712046

спасибо за ваш ответ.Но предварительное условие заключается в том,что я не могу изменить исходный код, и есть много исходных файлов ".c" и ".cpp". Что я могу сделать, так это просто прочитать его. добудь эту информацию.

LaxmikantYadav

Вы можете попробовать doxygen tool