Найти определение функции / переменной для ссылки в исходном коде

Мой проект содержит много файлов.

Иногда мне нужно знать, где определенная функция определена (реализована) в исходном коде. В настоящее время я занимаюсь текстовым поиском в исходных файлах имени функции, что занимает очень много времени.

Мой вопрос: есть ли лучший способ (флаг компилятора / компоновщика) найти определение этой функции в исходных файлах? …. Поскольку компоновщик уже преодолел все трудности, связанные с разрешением всех этих ссылок.

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

1

Решение

Пытаться утилита cscope.

Из руководства:

Позволяет искать код для:

  • все ссылки на символ
  • глобальные определения
  • функции, вызываемые функцией
  • функции, вызывающие функцию
  • текстовая строка
  • шаблон регулярного выражения
  • файл
  • файлы, включая файл

  • Curses based (текстовый экран)

  • Информационная база данных создается для более быстрого поиска и последующего использования
  • Нечеткий синтаксический анализатор поддерживает C, но достаточно гибок, чтобы быть полезным для C ++ и Java, а также для использования в качестве обобщенной «базы данных grep» (используйте ее для просмотра больших текстовых документов!)
  • Имеет режим командной строки для включения в скрипты или в качестве бэкэнда для GUI / внешнего интерфейса
  • Работает на всех разновидностях Unix, а также на большинстве операционных систем, контролируемых монополиями.

«Скриншот»:

C symbol: atoi

File     Function     Line
0 stdlib.h <global>      86 extern int atoi (const char *nptr);
1 dir.c    makefilelist 336 dispcomponents = atoi(s);
2 invlib.c invdump      793 j = atoi(term + 1);
3 invlib.c invdump      804 j = atoi(term + 1);
4 main.c   main         287 dispcomponents = atoi(s);
5 main.c   main         500 dispcomponents = atoi(s);
6 stdlib.h atoi         309 int atoi (const char *nptr) __THROWFind this C symbol:
Find this global definition:
Find functions called by this function:
Find functions calling this function:
Find this text string:
Change this text string:
Find this egrep pattern:
Find this file:
Find files #including this file:
2

Другие решения

Если символ экспортируется, то вы можете подключить objdump или же nm и посмотрите на .o файлы. Это не полезно для поиска вещей в заголовочных файлах.

Мое предложение будет поместить ваш проект в git (который несет в себе множество других преимуществ) и использовать git grep которая смотрит только на те файлы, которые находятся под контролем версий git grep объектные файлы и другие несоответствия). git grep тоже приятно и быстро.

0

По вопросам рекламы [email protected]