我在网上搜索某些东西来帮助我进行组装线分析。我搜索并在http://www.webservertalk.com/message897404.html上找到了一些东西

这个问题有两个部分:查找特定类型(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背景的人可以帮助我理解代码,保存代码,运行它并希望得到显示的结果。

最佳答案

如果您只想运行此特定的DTrace脚本,只需将其保存到.d脚本文件,然后使用以下命令针对已编译的可执行文件运行它:

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


用脚本文件名替换dtracescript.d的位置。

假设您将DTrace作为系统的一部分(我正在运行Mac OS X,自Leopard以来就拥有它)。

如果您对它的工作原理感到好奇,我不久前写了一个由两部分组成的教程,介绍了如何将DTrace用于MacResearch,可以在herehere中找到。

关于c - 如何运行此DTrace脚本来分析我的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4615069/

10-10 05:45