【问题标题】:Can't add perf probe for C++ methods无法为 C++ 方法添加性能探针
【发布时间】:2013-11-24 08:05:51
【问题描述】:

我正在尝试在我的库中为 C++ 方法添加 perf probe,但我不断收到以下信息:

$ perf probe --exec=/path/to/file --add='my::Own::Method'
Semantic error :There is non-digit char in line number.

我列出了可用的功能,如下所示:

$ perf probe --funcs --exec=/path/to/file

并尝试了一些也包含的 C 函数。可以为这些添加探针。所以我尝试了错误的名称(例如_ZN2my8Own16Method),perf probe 说它不存在。

有没有办法解决这个问题?

【问题讨论】:

    标签: c++ linux perf


    【解决方案1】:

    作为一种解决方法,您可以使用objdump 获取方法地址,perf probe 将接受它。

      $ perf probe -x /path/file '0x643f30'
    Added new event:
      probe_libfile:abs_643f30 (on 0x643f30 in /path/file)
    
    You can now use it in all perf tools, such as:
    
        perf record -e probe_libfile:abs_643f30 -aR sleep 1
    

    请注意perf probe 需要从文件偏移,objdumpreadelf 在调整加载地址后返回地址。对于-pie 可执行文件,加载地址为0,地址将相同。
    对于非-pie 可执行文件,您可以通过查看readelf -l /path/file 的输出并搜索偏移量0x000000 并查看VirtAddr 它指向的内容来获取加载地址,然后从您的符号地址中减去该数字从objdump --symsreadelf --syms 获取。通常是0x400000

    【讨论】:

    • objdump ./<executable> --syms | grep -i <method> 为我工作。输出中的第一列是要传递给perf probe 的地址。但必须在地址前加上“0x”,否则 perf 命令将失败。
    【解决方案2】:

    您可以运行它来查看所有 C++ 错位形式的函数名称:

    perf probe --exec=/path/to/file --funcs --no-demangle --filter='*'
    

    找到您想要的(实际的函数名称将在损坏的标记中),并使用--no-demangle 选项添加它。

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2020-02-24
      • 2017-04-21
      • 2016-07-13
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多