【发布时间】:2020-10-19 19:38:38
【问题描述】:
所以我正在关注link 将 BPF 程序附加到用户空间探测器,Dtrace 格式(请参阅用户静态定义的跟踪点部分)。
C 程序:
#include <sys/sdt.h>
int main() {
DTRACE_PROBE("hello-usdt", "probe-main");
}
确保包含探测信息的检查:
readelf -n hello_usdt
stapsdt 0x00000033 NT_STAPSDT (SystemTap probe descriptors)
Provider: "hello_usdt"
Name: "probe-main"
Location: 0x0000000000400535, Base: 0x00000000004005d4, Semaphore: 0x0000000000000000
Arguments:
还有 tplist:
sudo /usr/share/bcc/tools/tplist -l /path/to/hello_usdt
/path/to/hello_usdt "hello_usdt":"probe-main"
BPF 程序的内容(usdt.py):
from bcc import BPF, USDT
bpf_source = """
#include <uapi/linux/ptrace.h>
int trace_binary_exec(struct pt_regs *ctx) {
u64 pid = bpf_get_current_pid_tgid();
bpf_trace_printk("New hello_usdt process running with PID: %d", pid);
}
"""
usdt = USDT(path = "./hello_usdt")
usdt.enable_probe(probe = "probe-main", fn_name = "trace_binary_exec")
bpf = BPF(text = bpf_source, usdt = usdt)
bpf.trace_print()
故障描述:
sudo ./usdt.py
Traceback (most recent call last):
File "./usdt.py", line 13, in <module>
usdt.enable_probe(probe = "probe-main", fn_name = "trace_binary_exec")
File "/usr/lib/python3/dist-packages/bcc/usdt.py", line 154, in enable_probe
probe
bcc.usdt.USDTException: failed to enable probe 'probe-main';
a possible cause can be that the probe requires a pid to enable
我也尝试过:
- 在 BPF 程序中提供完整的可执行文件 (hello_usdt):
usdt = USDT(path = "/full/path/to/hello_usdt")
- 将上面的行替换为 PID 值 (./hello_usdt &),直接在 BPF 程序中获取 pid:
usdt = USDT(pid=1234)
- 在安装 python bcc 包后尝试使用 python2.7 和 3.7。
到目前为止没有运气。非常感谢任何帮助。 谢谢。
【问题讨论】:
标签: linux dtrace bpf ebpf probe