Профилирование C ++ с помощью инструментов Google Perf и динамических библиотек - PullRequest
3 голосов
/ 21 июня 2009

Я пытаюсь профилировать приложение C ++, которое я не написал, чтобы понять, где находятся основные точки вычислений. Я не эксперт по C ++ и, тем более, эксперт по отладке и профилированию C ++. Я полагаю, что у меня (общая?) Проблема с динамическими библиотеками.

Я компилирую ссылку на Google CPU Profiler , используя (OS X, G ++):

env LIBS=-lprofiler ./configure
make
make install

Затем я запускаю профиль установленного приложения (jags) с:

env CPUPROFILE=./jags.prof /usr/local/bin/jags regression.cmd
pprof /usr/local/bin/jags jags.prof

К сожалению, я получаю сообщение об ошибке:

pprof /usr/local/bin/jags jags.prof Can't exec "objdump": 
No such file or directory at /usr/local/bin/pprof line 2833.

objdump /System/Library/Frameworks/Accelerate.framework/Versions/A/
Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib: No such file or directory

Программа динамически связывается с libLAPACK.dylib. Так что prof, похоже, не понимает этого (?). Я думал о попытке статически связать, но документы, связанные с программой, говорят, что невозможно статически связать в LAPACK или BLAS (две обязательные библиотеки).

Есть ли способ заставить профилировщик игнорировать libLAPACK? Я в порядке, если он не сэмплирует в libLAPACK. Или как мне заставить профилирование работать?

Ответы [ 3 ]

3 голосов
/ 22 июня 2009

Эта ошибка была вызвана тем, что jags является сценарием оболочки, который впоследствии называется профилируемым кодом.

pprof /usr/local/bin/REAL_EXEC jags.prof

исправляет проблему.

0 голосов
/ 22 июня 2009

Если вы профилируете на OSX, инструмент Shark также действительно хорош. Он очень прост в использовании, и у меня получилось из коробки, когда я попробовал.

0 голосов
/ 21 июня 2009

Я не вижу чистого способа сделать это, но, возможно, есть хакерский обходной путь - что произойдет, если вы взломаете скрипт perl pprof (или лучше его копию ;-), строка 2834, чтобы вместо вызова error выдает сообщение, а затем return undef;?

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