在 Python 堆栈级别使用 eBPF 跟踪代码是否可行?
Is it feasible to use eBPF to trace code at the Python stack level?
非Linux平台上的dtrace长期以来一直被宣传能够动态检测node.js代码以在节点级别进行动态跟踪,例如允许在节点级别调试节点程序来自核心转储的 JavaScript 堆栈帧和变量(以及较低级别的跟踪)级别。
Linux 上的 eBPF 现在已经达到那个复杂程度了吗?我对 Python 特别感兴趣,但如果用任何类似的动态语言回答这个问题,我会考虑回答这个问题。
如果不是,还需要做些什么来支持它?
是的,您可以使用 BPF 和 USDT probes to trace Python scripts. You'll have to build your Python runtime with USDT probes。
密件抄送包括 a few tracing scripts for Python。例如,您可以使用 pythoncalls.sh
打印前 2 个名为:
的方法
$ ./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。
非Linux平台上的dtrace长期以来一直被宣传能够动态检测node.js代码以在节点级别进行动态跟踪,例如允许在节点级别调试节点程序来自核心转储的 JavaScript 堆栈帧和变量(以及较低级别的跟踪)级别。
Linux 上的 eBPF 现在已经达到那个复杂程度了吗?我对 Python 特别感兴趣,但如果用任何类似的动态语言回答这个问题,我会考虑回答这个问题。
如果不是,还需要做些什么来支持它?
是的,您可以使用 BPF 和 USDT probes to trace Python scripts. You'll have to build your Python runtime with USDT probes。
密件抄送包括 a few tracing scripts for Python。例如,您可以使用 pythoncalls.sh
打印前 2 个名为:
$ ./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。