Как профилировать общий объект без профилирования хост-приложения? - PullRequest
2 голосов
/ 24 января 2010

У меня есть хост-приложение, и я написал плагин. Я скомпилировал свой плагин в общий объект (скажем, foo.so), и хост-приложение загрузит его через dlopen. В этом случае мое хост-приложение - это инструмент выбора от llvm (хотя я не думаю, что это важно для вопроса).

Я хотел бы скомпилировать свой плагин с включенным профилированием (т. Е. g++ -pg, gprof). Однако, когда я делаю это, файл вывода профиля gmon.out никогда не создается. Возможно, gprof ожидает, что кто-то вызовет процедуру установки, или что-то в этом роде.

По разным причинам я бы не хотел перекомпилировать хост-приложение с -pg. Мне интересно, можно ли профилировать общий объект foo.so без профилирования хост-приложения opt.

Я также изучил другие инструменты профилирования; qprof от HP должен быть в состоянии справиться с этой ситуацией, но он не может разрешить имена функций в общем объекте (он обращается к addr2line очень наивно).

Спасибо, Ник

1 Ответ

0 голосов
/ 19 февраля 2010

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

Можете ли вы запустить хост-приложение под отладчиком или IDE? Есть ли в IDE кнопка паузы, или вы можете прервать ее с помощью Ctrl-C или какой-нибудь такой клавиши?

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

Даже если вы заставите gprof работать или подобный профилировщик, вы, вероятно, будете разочарованы .

...