Как я могу узнать, какие функции были вызваны из каких классов? - PullRequest
0 голосов
/ 08 мая 2011

Я использую Physics Toolkit (Geant4), который состоит из нескольких тысяч заголовочных файлов C ++ и файлов классов.Чтобы использовать инструментарий, вы должны написать серию собственных файлов классов, которые дают инструментарию некоторую базовую информацию о том, что вы пытаетесь смоделировать.Затем вы пишете main () файл, который регистрирует эти файлы с помощью инструментария, «делаете» его и затем выполняете финальную программу.Я использую Ubuntu 10.10 в качестве платформы для этого.

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

Один, несколько грубый метод, заключался бы в маркировке каждого из них.функция в каждом файле, например, вставьте cout << «Имя файла, Имя функции» << endl в качестве первого оператора в каждом теле функции и выведите все это в текстовый файл.Тем не менее, есть около 3000 файлов, которые мне нужно было бы просмотреть, что было бы несколько ... много времени. </p>

Есть ли более простой способ выяснить, какие функции были вызваны?Я искал руководство по инструментарию и, если я что-то не упустил, я не вижу возможности сделать это с помощью инструментария.Я думаю, мне понадобится какая-нибудь команда в терминале или внешняя программа?!?

Любая помощь, предложения или советы будут с благодарностью!

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

В Ubuntu у вас будет выбор профилировщиков.

Мне лично нравится

valgrind --tool=callgrind ./myprogram
kcachegrind

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

Большая тема профилировщика часто задаваемых вопросов находится здесь: Как мне профилировать код C ++, работающий в Linux?

Вверх по голове: gprof (требуется инструментарий), oprofile и perf record -g с чего легко начать

1 голос
/ 08 мая 2011

Я предлагаю вам использовать Doxygen и GraphViz, чтобы сделать это для вас.Вот отличный ответ , который должен начать вас.Я надеюсь, что это то, что вы ищете.

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