我在網上搜索的東西,以幫助我做裝配線分析。我搜索了一下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背景的人可以幫助我理解代碼,保存它,運行它並希望得到顯示的結果。
非常感謝!我真的很好奇,特別是看代碼的解釋!我有Linux的Ubuntu的...如果DTrace不是Ubuntu的一部分生病安裝它......編譯的代碼是否需要任何標誌?像gcc -pg或不一定? – 2011-01-06 19:30:51