长期以来,非 Linux 平台上的 dtrace 一直被宣传为能够动态检测 node.js 代码以在节点级别进行动态跟踪,例如允许在 JavaScript 堆栈帧和变量级别调试节点程序(连同较低的级别跟踪)来自核心转储。
Linux 上的 eBPF 现在是否达到了这种复杂程度?我特别对 Python 感兴趣,但如果这个问题是针对任何类似的动态语言回答的,我会考虑回答这个问题。
如果没有,还需要做什么来支持它?
是的,您可以使用 BPF 和USDT 探针来跟踪 Python 脚本。不过,您必须使用 USDT 探针构建您的 Python 运行时。
bcc 包括一些用于 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 的探测。