2011-01-06 2 views
3

アセンブリラインプロファイリングの手助けをするためにオンラインで検索していました。私は検索して何かを見つけました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のバックグラウンドの良い人がコードを理解し、保存し、実行し、結果を表示するのを助けることができることを期待してこれを開きました。

答えて

4

あなたがしたいすべてが単に.Dスクリプトファイルに保存し、コンパイルされた実行ファイルに対してそれを実行するには、次のようなコマンドを使用し、この特定のDTraceのスクリプトを実行している場合:

sudo dtrace -s dtracescript.d -c [Path to executable] 

ますdtracescript.dをスクリプトファイル名に置き換えてください。

これは、システムの一部としてDTraceを使用していることを前提としています(Leopard以来のMac OS Xを実行しています)。

これがどのように機能するのか不思議であれば、もう少し前にMacResearch用のDTraceを使用する2部構成のチュートリアルを書いています。これはherehereです。

+0

ありがとう!私は実際には特にコードの説明を見て非常に興味があります!私はLinuxのUbuntuを持っています... DTraceがubuntuの一部ではない場合、それをインストールします...コンパイルされたコードにフラグが必要ですか? gcc -pgのように、または必ずしもそうではありませんか? –

+0

DTraceはubuntuで動作しますか?一般的にはLinuxですか? –

+0

@Syntax_Error - DTraceはカーネルレベルで存在する必要があり、ライセンス問題のためにLinuxにないようです:http://stackoverflow.com/questions/2059311/whats-an-alternative-for-dtrace-on -linux。あなたが正しくリコールすれば、あなたの実行ファイルは特別なコンパイラ設定を必要としません。スクリプトが何をしているかについては、そこに書かれている構文のいくつかを説明し、さらに詳細な情報を得るための他のリソースを指摘しているので、私がリンクしている記事を紹介します。 –

関連する問題