首页 > 解决方案 > systemtap 中 .function() 和 .function().call 之间的区别

问题描述

我正在学习系统点击实用程序来调试 Linux 内核。

这是示例代码:

probe module("e1000").function("e1000_get*") {
printf("%s\n", ppfunc())
}

probe module("e1000").function("e1000_get*").return {
printf("%s \n", ppfunc())
}

和有什么区别

probe module("e1000").function("e1000_get*")和探测module("e1000").function("e1000_get*").call

我知道调用是为了函数入口,上面是入口和出口

标签: linuxdebugginglinux-kernelsystemtap

解决方案


来自 文档

.function变体在命名函数的开头附近放置一个探针,以便参数可用作上下文变量。

.return变体在从命名函数返回时放置一个探针,因此返回值可用作 $return 上下文变量。入口参数也是可用的,尽管函数可能已经改变了它们的值。

...

.inline修饰符 for过滤结果以仅包含内联函数的.function实例。.call修饰符选择相反的子集。

所以.call修饰符是从结果中只获得“调用”(这样)。


推荐阅读