アセンブリラインプロファイリングの手助けをするためにオンラインで検索していました。私は検索して何かを見つけましたhttp://www.webservertalk.com/message897404.htmlこのDTraceスクリプトを実行してアプリケーションのプロファイルを作成するにはどうすればよいですか?
この問題の2つの部分があります。特定のタイプ(inc、add、shlなど)のすべての命令を見つけてグループ化を決定し、次にどちらが実行されていて正しいのかを計算します。最初のビットは逆アセンブラでグループ分けするだけで十分です。どの命令が実行されているかを調べるために、Dtraceはもちろんあなたの友人です(少なくともユーザーランドでは)。
これを実行する最も良い方法は、各基本ブロックの先頭にすぎません。これらを見つけることは今の手作業であろうが、小規模なアプリケーションでは各命令のインストルメントが可能である。ここでは例です:
まず、試験中の私たちの非常に些細なCプログラム:
今main()
{
int i;
for (i = 0; i < 100; i++)
getpid();
}
、私たちの少しトリッキーなDスクリプト:
#pragma D option quiet
pid$target:a.out::entry
/address[probefunc] == 0/
{
address[probefunc]=uregs[R_PC];
}
pid$target:a.out::
/address[probefunc] != 0/
{
@a[probefunc,(uregs[R_PC]-address[probefunc]), uregs[R_PC]]=count();
}
END
{
printa("%s+%#x:\t%d\t%@d\n", @a);
}
main+0x1: 1 main+0x3: 1 main+0x6: 1 main+0x9: 1 main+0xe: 1 main+0x11: 1 main+0x14: 1 main+0x17: 1 main+0x1a: 1 main+0x1c: 1 main+0x23: 101 main+0x27: 101 main+0x29: 100 main+0x2e: 100 main+0x31: 100 main+0x33: 100 main+0x35: 1 main+0x36: 1 main+0x37: 1
例からこれはまさに私が必要とするものです。しかし、私はそれが何をしているのか、どのようにDTraceプログラムを保存するのか、どのようにコードを実行して結果を得たいのか分かりません。 DTraceのバックグラウンドの良い人がコードを理解し、保存し、実行し、結果を表示するのを助けることができることを期待してこれを開きました。
ありがとう!私は実際には特にコードの説明を見て非常に興味があります!私はLinuxのUbuntuを持っています... DTraceがubuntuの一部ではない場合、それをインストールします...コンパイルされたコードにフラグが必要ですか? gcc -pgのように、または必ずしもそうではありませんか? –
DTraceはubuntuで動作しますか?一般的にはLinuxですか? –
@Syntax_Error - DTraceはカーネルレベルで存在する必要があり、ライセンス問題のためにLinuxにないようです:http://stackoverflow.com/questions/2059311/whats-an-alternative-for-dtrace-on -linux。あなたが正しくリコールすれば、あなたの実行ファイルは特別なコンパイラ設定を必要としません。スクリプトが何をしているかについては、そこに書かれている構文のいくつかを説明し、さらに詳細な情報を得るための他のリソースを指摘しているので、私がリンクしている記事を紹介します。 –