我正在尝试学习如何在运行一些用C编写的基于JNI的共享库的Java应用程序上使用perf动态跟踪。该库通过路径/opt/myapp/lib/libmyapp.so
安装,然后与选项{{ 1}}。所以我运行以下命令:
-Djava.library.path=/opt/myapp/lib/
,没有有关错误原因的任何提示。如果库中没有使用这种名称的全局函数,我将得到相应的错误描述:
root@mypc:~# perf probe -x /opt/myapp/lib/libmyapp.so --add Java_net_my_app_pollEvents0
Error: Failed to add events.
任何人都可以提示如何解决此问题吗?我试图为root@mypc:~# perf probe -x /opt/myapp/lib/libmyapp.so --add Java_net_my_app_pollEvents1234567
Probe point 'Java_net_my_app_pollEvents1234567' not found.
Error: Failed to add events.
函数添加一个探针,它工作得很好:
malloc
答案 0 :(得分:2)
在我的例子中,“参数列表太长”错误是因为我将一个很长的 C++ 符号名称传递给 perf probe
;使用 EVENT=
语法显式命名探测点可以成功添加探测点:
$ sudo perf probe -x myelf --no-demangle --add myalias=_SomeVeryLongMangledNameWhee
$ sudo perf record -e 'probe_myelf:myalias' -a -- sleep 30