Возможно ли использовать eBPF для отслеживания кода на уровне стека Python? - PullRequest
0 голосов
/ 02 ноября 2018

dtrace на платформах, отличных от Linux, давно рекламировалась, чтобы иметь возможность динамически обрабатывать код node.js для динамической трассировки на уровне узлов, например, чтобы разрешить отладку программ узлов на уровне фреймов стека JavaScript и переменных ( вместе с трассировкой нижнего уровня) из дампа керна.

Достиг ли eBPF в Linux такого уровня сложности? В частности, меня интересует Python, но я бы посоветовал ответить на этот вопрос, если бы он отвечал для любого аналогичного динамического языка.

Если нет, то что еще нужно сделать, чтобы поддержать это?

1 Ответ

0 голосов
/ 03 ноября 2018

Да, вы можете использовать BPF и USDT зонды для трассировки скриптов Python. Вам придется собрать свою среду выполнения Python с пробами USDT .

bcc включает в себя несколько скриптов трассировки для Python . Например, вы можете использовать pythoncalls.sh для печати двух лучших методов, которые называются:

$ ./pythoncalls.sh -T 2 -p 26914
Tracing calls in process 26914 (language: python)... Ctrl-C to quit.

METHOD                                              # CALLS
<stdin>.<module>                                          1
<stdin>.fibo                                       14190928
^C

Обратите внимание, что некоторые другие виртуальные машины поддерживают зонды USDT, например, Java, Perl, PHP, Ruby и Tcl.

...