【问题标题】:Is it feasible to use eBPF to trace code at the Python stack level?使用 eBPF 在 Python 堆栈级别跟踪代码是否可行?
【发布时间】:2018-11-02 18:23:40
【问题描述】:

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

Linux 上的 eBPF 现在是否达到了这种复杂程度?我对 Python 尤其感兴趣,但如果这个问题是针对任何类似的动态语言回答的,我会考虑回答这个问题。

如果没有,还需要做什么来支持它?

【问题讨论】:

  • 我很想知道为什么投反对票?预期:如果因为认为没有那么具体:我想知道这种事情是否已经完成。这是非常具体的,它的好处是成为我真正想要找到的答案,并且答案回答了它。

标签: python linux trace bpf ebpf


【解决方案1】:

是的,您可以使用 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 的探测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2023-03-09
    • 2011-12-19
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多