Разница между .function() и .function().call в systemtap

Я изучаю системную утилиту tap для отладки ядра 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

Я знаю, что вызов предназначен для входа в функцию, это выше для входа и выхода


person md.jamal    schedule 21.12.2018    source источник


Ответы (1)


Из systemtap документы:

Вариант .function помещает зонд в начало именованной функции, так что параметры доступны как переменные контекста.

Вариант .return помещает зонд в момент возврата из именованной функции, поэтому возвращаемое значение доступно как контекстная переменная $return. Входные параметры также доступны, хотя функция могла изменить их значения.

...

Модификатор .inline для .function фильтрует результаты, чтобы включить только экземпляры встроенных функций. Модификатор .call выбирает противоположное подмножество.

Таким образом, модификатор .call предназначен для получения только «вызовов» (как таковых) из результатов.

person red0ct    schedule 21.12.2018