2011-01-06 20 views
3

我在網上搜索的東西,以幫助我做裝配線分析。我搜索了一下http://www.webservertalk.com/message897404.html如何運行此DTrace腳本來分析我的應用程序?

這個問題有兩個部分;查找特定類型的所有指令(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

如果你想要做的就是運行這個特殊的DTrace腳本,只需將其保存到.D腳本文件,並使用如下命令來運行它針對您編譯成可執行文件:

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

,你用您的腳本文件名替換dtracescript.d

這假定你有DTrace作爲你係統的一部分(我運行Mac OS X,自從Leopard以來它已經擁有了它)。

如果你對它的工作原理感到好奇,我寫了一篇關於前段時間使用DTrace for MacResearch的兩部分教程,可以找到herehere

+0

非常感謝!我真的很好奇,特別是看代碼的解釋!我有Linux的Ubuntu的...如果DTrace不是Ubuntu的一部分生病安裝它......編譯的代碼是否需要任何標誌?像gcc -pg或不一定? – 2011-01-06 19:30:51

相關問題