8

質問はそれをかなり要約しています。「dtrace'連想配列を印刷する'」は、グーグルヒットが1つだけあり、同様の検索も同様に役に立ちません。

編集:

集計を使用する場合でも、エントリを削除できるかどうかはわかりません。私のアプリケーションでは、次のようなことができる必要があります。

file_descriptors[0] = "stdin"
file_descriptors[3] = "service.log"

...
...


file_descriptors[3] = 0

...
...

# should print only those entries that have not been cleared.
print_array(file_descriptors)

集計全体をクリアできることは知っていますが、1つのエントリについてはどうでしょうか。

アップデート:

私はOSXでこれを行っており、アプリケーションは特定のプロセスによって開かれたすべてのファイル記述子を追跡するため、256個のパス名の配列を持つことができました。

syscall::open*:entry
/execname == $1/
{
    self->path = copyinstr(arg0);
}

syscall::open*:return
/execname == $1/
{    
    opened[arg0] = self->path;
}

syscall::close*:entry
/execname == $1/
{
    opened[arg0] = 0;
}

tick-10sec
{
    printf("  0:  %s\n", opened[0]);
}

The above probe repeated 255 more times...

最悪だ。もっといいものが欲しいです。

4

2 に答える 2

1

これは Google が見つけたリンクですか?アドバイスはかなり健全に思えるので:

あなたが探している効果は、配列ではなく集計を使用して達成する必要があると思います。したがって、実際には次のようにします。

@requests[remote_ip,request] = count();

... その後:

profile:::tick-10sec
{
    /* print all of the requests */
    printa(@requests);

    /* Nuke the requests aggregation */
    trunc(@requests);
}
于 2010-02-23T20:21:15.797 に答える
0

の代わりに連想配列 and sum(1)and を使用します。sum(-1)count()

于 2014-04-29T22:12:30.017 に答える