16

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

$ 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说它不存在。

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

4

2 回答 2

7

作为一种解决方法,您可以获取方法地址objdumpperf 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 --symsor readelf --syms。通常会是0x400000

于 2016-12-16T13:12:06.723 回答
2

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

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

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

于 2020-12-01T02:02:06.453 回答