Кто-нибудь может предложить способ отследить каждый вызов функции? - PullRequest
3 голосов
/ 14 ноября 2010

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

int a()
{
    b();
    return 1;
}
void b()
{
}
int main()
{
    int x=a();
    return 0;
}

Итак, моя трассировка вызовов main-> a-> b. Таким образом, я хочу отслеживать каждый набор путей вызовов.Я подумал о глубоком первом поиске.Но я не уверен, как это пойдет.Может кто-нибудь предложить мне какой-либо конкретный метод для реализации в Perl?У меня будет файл программы на C, и я буду запускать на нем скрипт perl, чтобы получить трассировку вызовов.

Ответы [ 3 ]

5 голосов
/ 14 ноября 2010

В этой статье перечислены несколько бесплатных программ графа вызовов, в том числе egypt , который представляет собой небольшой скрипт на Perl, использующий gcc и Graphviz для генерации статического графа вызововпрограмма на Си.

0 голосов
/ 05 декабря 2010

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

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

0 голосов
/ 14 ноября 2010

Я верю Doxygen может сделать это.

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