Я столкнулся с проблемой при проверке локальных переменных приложения пользовательского пространства в systemtap.
Я пишу test.c следующим образом:
#include <stdio.h>
int func(int *p, int val)
{
printf("p=%p val=%d\n", p, val);
return 1;
}
int main()
{
int a = 7;
func(&a, a);
return 0;
}
и скомпилируйте его с помощью -g
# gcc -g -o test test.c
Systemtap может видеть переменную func()
: p
и val
# stap -L 'process("./test").function("func")'
process("/home/ryan/Public/test").function("func@/home/ryan/Public/test.c:3") $p:int* $val:int
Поэтому я использую этот stp для просмотра переменных:
# stap -e 'probe process("./test").function("func") {printf("%s(%p, %d)\n", probefunc(), $p, $val)}'
Но локальные переменные неверны в результате при выполнении тестовой программы, она показывает:
func(0x0, 0)
Я использую fedora19 с:
kernel-3.11.9-200.fc19.x86_64
systemtap-sdt-devel-2.3-1.fc19.x86_64
systemtap-2.3-1.fc19.x86_64
systemtap-client-2.3-1.fc19.x86_64
systemtap-devel-2.3-1.fc19.x86_64
systemtap-runtime-2.3-1.fc19.x86_64
gcc-4.8.2-7.fc19.x86_64
Может ли кто-нибудь встретить эту проблему или дать мне решение?