Динамическая трассировка Perf Не удалось добавить события - PullRequest
2 голосов
/ 29 мая 2019

Я пытаюсь научиться использовать динамическую трассировку perf в моем java-приложении, в котором запущена некоторая общая библиотека на основе JNI, написанная на C. Библиотека устанавливается по пути /opt/myapp/lib/libmyapp.so, а затем запускается с параметром -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, и она работает просто отлично:

root@mypc:~# perf probe -x /lib/x86_64-linux-gnu/libc-2.27.so --add malloc
Added new event:
  probe_libc:malloc    (on malloc in /lib/x86_64-linux-gnu/libc-2.27.so)

You can now use it in all perf tools, such as:

        perf record -e probe_libc:malloc -aR sleep 1
...