2014-01-09 3 views
0

Я пытаюсь распечатать данные, полученные в сокете - содержимое ubuf по возврату sys_recv. Я не могу получить спецификатор формата% M для правильной работы. Может кто-нибудь объяснить, как правильно его использовать. БлагодаряФормат Systemtap% M printf возвращает только один символ

stap -L 'kernel.function("[email protected]/socket.c")' 
kernel.function("[email protected]/socket.c:1800") $fd:int $ubuf:void* $size:size_t $flags:unsigned int 

с помощью этого зонда: [@ Kakitis лари НТКГ] $ кошка раструба recv.stp

#! /usr/bin/env stap 
probe kernel.function("[email protected]/socket.c").return { 
     if (pid() == target()) 
       printf ("%s fd %d size %d ubuf %p %10M \n ", ppfunc(),$fd,$size,$ubuf,$ubuf) 
} 

Из моего чтения страницы человека формат% 10M должен возвращать 10 байт из место, на который указывает $ ubuf: пустота, но я получаю только 1. Настройка параметра 10 смен выводить один символ, а не показывать более или менее память

[[email protected] stap]# stap -x 16796 socket-recv.stp 
sys_recv fd 13 size 64071 ubuf 0x86ceca0   70 
sys_recv fd 13 size 62679 ubuf 0x86cf210   50 

Изменение 10 до 2 дает этому

[[email protected] stap]# stap -x 16796 socket-recv.stp 
sys_recv fd 13 size 64071 ubuf 0x86ceca0 70 
sys_recv fd 13 size 62679 ubuf 0x86cf210 50 

Системные сведения являются:

[[email protected] stap]$ stap --version 
Systemtap translator/driver (version 2.1/0.154, rpm 2.1-2.fc17) 
Copyright (C) 2005-2013 Red Hat, Inc. and others 
This is free software; see the source for copying conditions. 
enabled features: AVAHI LIBRPM LIBSQLITE3 NSS TR1_UNORDERED_MAP NLS 
[[email protected] stap]$ uname -a 
Linux kakitis 3.4.33 #1 SMP Tue Jan 7 14:15:58 EST 2014 i686 i686 i386 GNU/Linux 
[[email protected] stap]$ cat /etc/redhat-release 
Fedora release 17 (Beefy Miracle) 

ответ

1

Не следует путать выходные параметры ширины и точности для Е(). Ниже будет делать то, что вы имели в виду:

printf ("%33.10M", $pointer) 

для печати 10 байт (20 шестнадцатеричных символов) в 33-символьный шириной поля вывода. Один или оба числа могут быть заменены на *, так что соответствующие ширины передаются как параметры перед указателем $. Наверху страница руководства была обновлена ​​примером.

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