Я пытаюсь отладить некоторый код в ядре, используя systemtap. Мне нужно напечатать значение локальных переменных в этой функции, но похоже, что systemtap может видеть только аргументы функции, а не локальные переменные, определенные в этой функции. Вот мой тестовый сценарий.
probe kernel.function("tcp_write_xmit") {
if( execname() == "bw_client"){
printf(
"tcp_write_xmit skb len %d\n",
$skb
);
}
}
Когда я запускаю это, я получаю следующую ошибку
semantic error: failed to retrieve location attribute for 'skb'
[man error::dwarf] (dieoffset: 0x5bd30b4): identifier
'$skb' at /home/cca-user/systaptest/txprobe.stp:37:6
source: $skb
^
Pass 2: analysis failed. [man error::pass2]
Однако функция tcp_write_xmit
явно имеет skb
Использование опции -L
для печати доступных переменных дает мне 5 переменных, которые являются аргументами функции, но ни одна из локальных переменных не видна.
root@i-sahmed-node2: /mnt/linux-3.13.0 # stap -L
'kernel.function("tcp_write_xmit")'
kernel.function("tcp_write_xmit@/build/buildd/linux-3.13.0/net/ipv4
/tcp_output.c:1832") $sk:struct sock* $mss_now:unsigned int $nonagle:int
$push_one:int $gfp:gfp_t
Вот ядро и версия systemtap, которую я использую
root@i-sahmed-node2: /mnt/linux-3.13.0 # stap --version
Systemtap translator/driver (version 2.3/0.158, Debian version 2.3-1ubuntu1 (trusty))
Copyright (C) 2005-2013 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
enabled features: AVAHI LIBSQLITE3 NSS TR1_UNORDERED_MAP NLS
root@i-sahmed-node2: /mnt/linux-3.13.0 # uname -a
Linux i-sahmed-node2 3.13.0-53-generic #89-Ubuntu SMP Wed May 20 10:34:39 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Есть идеи?