比如楼主现在可以通过 bpftrace 的以下用法得到某一个函数被调用的次数,但我还想知道每次的调用栈,懒得改代码重编译再重启,能不能自己写一个 bpf 程序实现这个需求?
bpftrace -e 'kprobe:vgic_kick_vcpus { @[probe] = count() }'
1
cfeitong 2023-04-10 15:50:54 +08:00 via Android
不能。原因是 ebpf 无法读取用户态内存,自然也无法读取用户栈。
|
3
zpd2009 2023-04-10 22:31:19 +08:00
@wniming 我了解到的是不行的。eBPF 可以干很多事情,但是限制也是很厉害的。没有看到有支持 dump 调用栈的函数。https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md
|
4
fuzhuo233 2023-04-11 00:29:42 +08:00 via iPhone 1
不是有 kstack/ustack 么,一把梭
bpftrace -e 'kprobe:vgic_kick_vcpus { @[kstack] = count() }' |