2013-11-20 5 views
2

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

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

Например:

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

Что здесь происходит?

Что такое _ZN7?

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

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

+1

Попробуйте передать результат в C++ filt: perf report -g | C++ ФИЛТР – HughB

ответ

7

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

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

Например:

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

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

Смежные вопросы