Есть ли простой способ найти, какие другие функции могут вызывать определенную функцию из исходного кода? - PullRequest
2 голосов
/ 13 января 2010

У меня есть функция, которая явно вызывается четырьмя другими функциями в моей базе кода. Затем по очереди каждая из этих функций вызывается как минимум 10 другими функциями в моем коде. Я знаю , что я мог вручную отследить один из этих вызовов функций для основной функции моей программы (которая имеет 30 вызовов функций), но кажется, что это было бы лучше для компьютера. Я просто хочу знать, какая из функций в main() вызывает эту скрытую функцию.

Кто-нибудь знает какое-нибудь программное обеспечение, которое может помочь?

Также об использовании отладчика не может быть и речи. Это было бы слишком легко. Программное обеспечение работает только на портативном устройстве.

Ответы [ 5 ]

9 голосов
/ 13 января 2010

doxygen , правильно настроенный, способен выводить HTML-документ со списком вызываемых абонентов и списком вызовов для каждой функции в вашем коде. Вы также можете создавать графы вызовов.

2 голосов
/ 13 января 2010

Закомментируйте его (или, лучше, закомментируйте его прототип) и попробуйте скомпилировать вашу программу. Вы должны увидеть, где на него ссылаются.

1 голос
/ 13 января 2010

Я второе предложение Мувичиэля об использовании doxygen для получения этой информации. Недостатком является то, что doxygen работает с исходным кодом. Вы можете видеть только то, какие функции МОГУТ ПОТЕНЦИАЛЬНО вызывать вашу функцию, а не те, которые на самом деле вызывают вашу функцию. Если вы используете Linux и можете изменить исходный код рассматриваемой функции, вы можете получить эту информацию, используя функции backtrace () и backtrace_symbols ().

1 голос
/ 13 января 2010

http://cscope.sourceforge.net/ Я думаю, это также может быть полезно.

1 голос
/ 13 января 2010

Если на вашей платформе есть API для захвата следов, я бы просто использовал эту функцию, чтобы использовать их и записать их в файл для последующего анализа. Нет гарантии, что при этом будут найдены все вызывающие абоненты (или вызывающие абоненты -...- из вызывающих абонентов), но если вы будете использовать все функции программ во время такой регистрации, вы должны найти «большинство» из них. Для относительно простых программ таким способом можно найти всех абонентов.

Кроме того, многие инструменты отбора проб могут получить эту информацию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...