如何使用systemtap $$ param $$和$$ return $$显示double / float值

时间:2016-05-13 18:36:59

标签: systemtap

我正在使用systemtap来获取带有参数和返回值的调用图,但是float和double变量显示为?焦炭。有没有办法显示正确的值?

我的systemtap脚本是这样的:

#! /usr/bin/env stap

probe $1.call   { trace(1, $$parms$$) }
probe $1.return { trace(-1, $$return$$) }   

一个简单的C程序代码来测试:

double test(int a, char b, double c, float e){
    return c;
}

int main(void){
    test(1,'1',1.0,1.0f);
    return 0;
}

运行上面代码的脚本输出(注意c和e值,以及测试返回):

test a=1 b='1' c=? e=?
test return=?
main 
main return=0

1 个答案:

答案 0 :(得分:2)

Systemtap当前不支持浮点值(主要是因为在内核上下文中不允许浮点运算)。另请参阅https://sourceware.org/bugzilla/show_bug.cgi?id=13838https://sourceware.org/bugzilla/show_bug.cgi?id=13832

笨拙的解决方法可能类似于

probe process("a.out").function("test") {
    hexdump = sprintf("%.*M", 4, & $e)
}

或类似地,使用user_int(& $e)来访问浮点值,就像它是一个整数一样。以十进制形式呈现它是一个单独的问题,但即使只是通过脚本语言函数分离尾数/指数也可能是这样。