0

ソケットで受信したデータ (sys_recv が返されたときの ubuf の内容) を出力しようとしています。%M 書式指定子が正しく機能しません。誰かがそれを適切に使用する方法を説明できますか。ありがとう

stap -L 'kernel.function("sys_recv@net/socket.c")'
kernel.function("sys_recv@net/socket.c:1800") $fd:int $ubuf:void* $size:size_t $flags:unsigned int

このプローブを使用: [laris@kakitis stap]$ cat socket-recv.stp

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

マニュアルページを読んだところ、フォーマット %10M は $ubuf:void が指す場所から 10 バイトを返すはずですが、1 しか取得できませんでした。パラメーター 10 を調整すると、メモリの増減ではなく、1 文字の出力がシフトします。

[root@kakitis 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 に変更すると、次のようになります。

[root@kakitis 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

システムの詳細は次のとおりです。

[laris@kakitis 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
[laris@kakitis stap]$ uname -a
Linux kakitis 3.4.33 #1 SMP Tue Jan 7 14:15:58 EST 2014 i686 i686 i386 GNU/Linux
[laris@kakitis stap]$ cat /etc/redhat-release 
Fedora release 17 (Beefy Miracle)
4

1 に答える 1