2011-01-02 8 views
0

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

/* in file f1.c */ 
int f1() { 
x_func(); 
} 

/* in file f2.c */ 
int f2() { 
x_func(); 
} 

Если мы хотим проследить происхождение всех вызовов функций в x_func(), то выход будет:

f1.c:f1() 
f2.c:f2() 

Это очень полезно при чтении исходного кода. Все ответы приветствуются. Спасибо заранее: D

+1

Большинство IDE могут это сделать. Например, посмотрите на Eclipse. – Konerak

+1

Если у ваших функций были лучшие имена, 'grep' будет хорошо. –

+0

Спасибо всем за то, что нашли время ответить на мой вопрос: «> – user560343

ответ

0

Doxygen сделает это за вас (с фотографиями!).

Также многие IDE также включают такие возможности. Visual Studio, например, будет генерировать текстовые графики вызовов, а также поиск «найти все ссылки». Вы можете сделать это с помощью бесплатного VC++ Express Edition, проект не обязательно должен быть проектом VC++ для использования его функций навигации по коду, просто создайте проект make-файла и добавьте пути файла заголовка к настройкам препроцессора.

1

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

+0

Я думаю, что OP хочет статический анализ, чтобы узнать все возможные точки прибытия –

+0

@ Давид Хеффернан: может быть, OP не был достаточно явным, и поскольку уже было два хороших ответа о статическом анализе, я предложил один о динамическом анализе. – peoro

0

Файлы тегов, такие как ctags и etags, делают это. Они написаны для работы с редакторами, а не для удобства чтения человеком. Emacs's M-. ключ ищет вещи в файле tag.