Я пытаюсь отладить сборку webkit с помощью Linux perf, которую я скомпилировал с символами.
Выходные данные «perf report -g» содержат символы с половиной для чтения человеком, а другая половина — с буквенно-цифровыми значениями.
Например:
_ZN7WebCore12RenderObject18setAnimatableStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
|
|--91.30%-- _ZN7WebCore4Node14setRenderStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
| _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE
| _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE
| _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE
Что тут происходит?
Что такое _ZN7?
Я догадываюсь, что это как-то связано с C ++, и, возможно, мне нужно скомпилировать дополнительные параметры, чтобы правильно отображать символы в perf.
ЛЮБЫЕ указатели здесь будут оценены. Я не могу найти ничего об этом нигде в документации.
Это так называемые «искалеченные имена»Компилятор C ++ кодирует информацию о типе в имена символов, так что компоновщик может правильно реализовать перегрузку, область видимости классов и пространства имен без необходимости реального понимания системы типов C ++ и без поддержки символов вне основных буквенно-цифровых символов и символов подчеркивания.
Вы можете превратить их обратно в понятные человеку имена с помощью таких инструментов, как c++filt
под линуксом.
Например:
$ echo _ZN7WebCore12RenderObject18setAnimatableStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE | c++filt
WebCore::RenderObject::setAnimatableStyle(WTF::PassRefPtr<WebCore::RenderStyle>)
Или в вашем случае, perf report -g | c++filt
вероятно будет делать то, что вы хотите.
Других решений пока нет …