python - 使用 eBPF 在 Python 堆栈级别跟踪代码是否可行?

标签 python linux trace bpf ebpf

非 Linux 平台上的 dtrace 长期以来一直被宣传能够动态检测 Node.js 代码以在节点级别进行动态跟踪,例如允许在 JavaScript 堆栈帧和变量级别调试节点程序(以及来自核心转储的较低级别跟踪)。

Linux 上的 eBPF 现在已经达到那么复杂的水平了吗?我对 Python 特别感兴趣,但如果任何类似的动态语言都回答了这个问题,我会认为这个问题得到了解答。

如果没有,还需要做什么来支持这一点?

最佳答案

是的,您可以使用 BPF 和 USDT probes跟踪 Python 脚本。你必须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 的虚拟机。

关于python - 使用 eBPF 在 Python 堆栈级别跟踪代码是否可行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53123965/

相关文章:

python - Matplotlib 子图 y 轴刻度与上图重叠

linux - Oracle表单运行表单小程序但没有响应

console - Console.writeline()/trace.writeline() 之间的区别

用于 64 位的 Linux futex

python - 如何从跟踪文件中查找重复序列

asp.net - 寻找有关使用跟踪日志记录的简单说明

python - 尝试使用 tensorflow 自定义回调进行中间层预测时出现 "Layer is not connected, no input to return"错误

python - 为什么这个元胞自动机代码在 Python 3.x 中工作得很好,但在 Python 2.x 中却不行?

python - 无法从命令行调用 py.test <module_name>.py?

linux - 使用 shell 命令将数据汇集到守护进程的非守护进程中