2016-06-17 3 views
1

В настоящее время я профилирую приложение C++ на Solaris с использованием collect и analyser, но я вижу только количество секунд, затрачиваемых на каждую функцию.Счет вызовов функций в Solaris

Как я могу узнать, сколько раз вызывалась каждая функция?

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

+0

Это зависит от вашего компилятора. Например, gprof – Garf365

ответ

2

Команда collect не работает таким образом - это Образцы исполняемый исполняемый файл для сбора данных стека вызовов, которые он собирает.

Необходимо указать compile with -xpg и использовать prof или gprof в файле выходных данных.

Что-то вроде этого Dtrace сценария будет также собирать счетчики вызовов функции:

countfuncs.d:

pid$target:::entry 
{ 
    @[ probefunc ] = count(); 
} 

Затем запустите что:

dtrace -s countfuncs.d -c your_program ... 

По моему опыту, подсчитывая количество раз функция называется не имеет значения - сколько время (процессор или настенные часы) проводится в любой функции t шляпа имеет значение. Если функция занимает 90% времени выполнения, то вы тратите свои усилия на оптимизацию производительности, независимо от того, была ли эта функция вызываться один или несколько раз. Если функция занимает 0.001% времени выполнения, вы не беспокоитесь о ней независимо от того, сколько раз она вызывается.

+0

dtrace был именно тем, что я искал. Я согласен с тем, что в большинстве случаев количество вызовов не имеет значения, но иногда это помогает выделить неожиданные действия – Marc