Поиск вызовов определенной функции в C (синтаксический анализатор)

#c #parsing #grep #function-call

#c #синтаксический анализ #grep #функция-вызов

Вопрос:

Есть ли надежный способ определить, в каких местах вызывается конкретная функция, и их аргументы в исходном файле c?

В настоящее время я использую следующий код.

 fns=$(cat $1 | sed -n -e 's/^.*function_name(//p'|cut -f1,2 -d, --output-delimiter=' '| tr -d ")
  

Это работает довольно хорошо, но это не скрыто: он сообщит о неправильных результатах, если мое регулярное выражение совпадает с комментариями, строками, макросами, если моя функция вызывается в нескольких строках, …)

Есть ли надежный способ решить мое решение?

Примечание: я стараюсь держаться подальше от пользовательских анализаторов, поскольку для их работы требуется обрабатывать удивительно большое количество угловых регистров, поэтому я думаю, что это не самый умный способ решить мою проблему.

Комментарии:

1.ctags ГЛОБАЛЬНЫЙ cscope

2. Вы пытались сгенерировать перекрестную ссылку компоновщиком и использовать это? В конце концов, он должен знать, какие вызовы он разрешил. Однако это не работает для локальных вызовов модуля, поскольку они немедленно разрешаются компилятором.