2013-12-25 2 views
0

Описание проблемы:Третье упражнение из раздела 2.3 «упражнения» для официального Systemtap учебник

Листинг: socket_trace.stp

probe kernel.function("*@net/socket.c").call{ 
    printf("%s -> %s\n", thread_indent(1), ppfunc()) 
} 
probe kernel.function("*@net/socket.c").return { 
    printf("%s <- %s\n", thread_indent(-1), ppfunc()) 
} 

Изменить список, удалив модификатор .call от первого зонда. Обратите внимание на то, что запись функции и возврат функции теперь больше не соответствуют. Это связано с тем, что теперь первый датчик будет соответствовать как нормальным функциям, так и встроенным функциям. Попробуйте поместить модификатор .call обратно и добавить еще один пробник только для зонда kernel.function ("* @ net/socket.c"). Return Что вы можете сделать в printf-инструкции в обработчике зонда, чтобы показать вписанные функции между выводами .call и .return с отступом?

Я понятия не имею, как показать, что вызванный вызов функции функции (если есть) в обработчике возвращаемого объекта функции? Может ли кто-нибудь предложить руку? Заранее спасибо.

ответ

0
probe kernel.function("*@net/socket.c").inline { 
    printf("%s -- %s\n", thread_indent(0), ppfunc()) 
} 
+0

Как правило, это хорошая идея, чтобы объяснить, почему ваше решение работает в дополнение к размещению кода. – ApproachingDarknessFish

+0

В контексте, какая часть не является понятной? – fche

+0

Ваше решение такое же, как мое. Тем не менее, проблема desc требует «добавить еще один зонд только для зонда kernel.function (« * @ net/socket.c »). Return», что меня смущает ... – storypku

Смежные вопросы