столбец с именем профиля sprof flat имеет уродливый формат

Я пытаюсь профилировать функции, предоставляемые общей библиотекой, используя sprof.
Профилирование работает, но столбец, содержащий имена функций, очень плохо отформатирован. Я использую, например, unordered_map, предоставленный boost. Соответствующая запись в плоском профиле:

Each sample counts as 0.01 seconds.
%   cumulative   self              self     total
time   seconds   seconds    calls  us/call  us/call  name
[...]
0.12     78.47     0.10   232327     0.43            _ZN5boost9unordered13unordered_mapIN4BALL6StringES3_NS_4hashIS3_EESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEC1ERKSC_
[...]

Я использовал те же команды, как описано в sprof справочная страница. Я просто изменил пути.
Весь профиль трудно читать, потому что невозможно четко увидеть пространства имен, имена классов, имена функций и т. Д.

Я попробовал небольшой пример sprof справочная страница, и это работало хорошо.

Кто-нибудь знает, почему столбец имени здесь так безобразно отформатирован?

0

Решение

Такие имена, как ‘_ZN5boost9unordered13unordered_mapIN4BALL6StringES3_NS_4hashIS3_EESt8equal_toIS3_ESaISt4pairIKS3_S3_EEEC1ERKSC_’
из C ++ название искажения. Пространства имен, имена классов, аргументы шаблона, имя функции, типы аргументов функции записываются в имени. В mangling есть некоторые дополнительные функции C ++, такие как метод перегрузки для различных аргументов и шаблонов для генерации специфичного для типа кода.

Вы можете отфильтровать вывод с помощью c++filt программа, которая разбирает большинство имен символов C ++ в кодоподобный формат C ++, читаемый человеком.

Существуют также онлайн-сервисы для разборки имен: https://demangler.com/
Он разбивает ваш символ на:

boost::unordered::unordered_map<BALL::String, BALL::String, boost::hash<BALL::String>, std::equal_to<BALL::String>, std::allocator<std::pair<BALL::String const, BALL::String> > >::unordered_map(boost::unordered::unordered_map<BALL::String, BALL::String, boost::hash<BALL::String>, std::equal_to<BALL::String>, std::allocator<std::pair<BALL::String const, BALL::String> > > const&)

или, если мы переписываем это:

boost::unordered_map<BALL::String, BALL::String...>::
unordered_map(boost::unordered::unordered_map<BALL::String, BALL::String...> const&)

или наконец — это конструктор копирования

unordered_map<String, String...>::unordered_map( unordered_map<String, String...> const&)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]