gpt4 book ai didi

c++ - perf 输出中的奇怪字符...

转载 作者:太空狗 更新时间:2023-10-29 11:32:57 25 4
gpt4 key购买 nike

我正在尝试使用我用符号编译的 Linux perf 调试 webkit 构建。

“perf report -g”的输出具有一半人类可读的符号和另一半字母数字值的符号。

例如:

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

这里发生了什么?

_ZN7 是什么?

我的直觉是这与 C++ 有关,也许我需要使用更多选项进行编译以使符号在 perf 中正确表示。

如有任何指点,我们将不胜感激。我在文档中的任何地方都找不到与此相关的任何内容。

最佳答案

这些就是所谓的"mangled names" : C++ 编译器将类型信息编码为符号名称,这样链接器就可以正确地实现重载、类作用域和命名空间,而无需真正理解 C++ 类型系统,也无需支持基本字母数字和下划线以外的字符。

您可以使用 Linux 下的 c++filt 等工具将它们转换回人类可读的名称。

例如:

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

或者在您的情况下,perf report -g | c++filt 可能会做你想做的事。

关于c++ - perf 输出中的奇怪字符...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com