Чтобы заставить perf probe -V
работать, вам нужно будет передать файл vm linux с debuginfo, который, как вы, похоже, сделали в соответствии с вашим комментарием -
sudo perf probe --vmlinux /usr/lib/debug/boot/vmlinux-4.15.0-1077-azure
-V tcp_sendmsg
Available variables at tcp_sendmsg
@<tcp_sendmsg+0>
size_t size
struct msghdr* msg
struct sock* sk
Теперь, согласно человеку -page, perf probe -L
означает
-L, --line=
Show source code lines which can be probed.
This needs an argument which specifies a range of the source code.
(see LINE SYNTAX for detail)
, что означает, что вам нужно указать местоположение исходного кода ядра, когда вы запускаете perf probe -L
, в противном случае инструмент elfutils
, который анализирует vm linux файл с debuginfo не сможет определить правильный путь для исходных текстов ядра.
Вы можете скачать исходные коды ядра, как указано здесь
И затем запустить perf probe
где вы указываете переключатель --source
,
sudo perf probe --source /usr/src/linux-source-4.4.0 --vmlinux /usr/lib/debug/boot/vmlinux-4.15.0-1077-azure -L tcp_sendmsg
<tcp_sendmsg@/usr/src/linux-source-4.4.0//net/ipv4/tcp.c:0>
0 /* Clear memory counter. */
1 tp->ucopy.memory = 0;
}
4 static struct sk_buff *tcp_recv_skb(struct sock *sk, u32 seq, u32 *off)
5 {
6 struct sk_buff *skb;
u32 offset;
9 while ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) {
offset = seq - TCP_SKB_CB(skb)->seq;
if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_SYN)
offset--;