Странные символы в перфомном выводе …

Я пытаюсь отладить сборку webkit с помощью Linux perf, которую я скомпилировал с символами.

Выходные данные «perf report -g» содержат символы с половиной для чтения человеком, а другая половина — с буквенно-цифровыми значениями.

Например:

_ZN7WebCore12RenderObject18setAnimatableStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
|
|--91.30%-- _ZN7WebCore4Node14setRenderStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE
|          _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE
|          _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE
|          _ZN7WebCore7Element11recalcStyleENS_4Node11StyleChangeE

Что тут происходит?

Что такое _ZN7?

Я догадываюсь, что это как-то связано с C ++, и, возможно, мне нужно скомпилировать дополнительные параметры, чтобы правильно отображать символы в perf.

ЛЮБЫЕ указатели здесь будут оценены. Я не могу найти ничего об этом нигде в документации.

2

Решение

Это так называемые «искалеченные имена»Компилятор C ++ кодирует информацию о типе в имена символов, так что компоновщик может правильно реализовать перегрузку, область видимости классов и пространства имен без необходимости реального понимания системы типов C ++ и без поддержки символов вне основных буквенно-цифровых символов и символов подчеркивания.

Вы можете превратить их обратно в понятные человеку имена с помощью таких инструментов, как c++filt под линуксом.

Например:

$ echo _ZN7WebCore12RenderObject18setAnimatableStyleEN3WTF10PassRefPtrINS_11RenderStyleEEE | c++filt
WebCore::RenderObject::setAnimatableStyle(WTF::PassRefPtr<WebCore::RenderStyle>)

Или в вашем случае, perf report -g | c++filt вероятно будет делать то, что вы хотите.

7

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

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

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