【问题标题】:How can I run this DTrace script to profile my application?如何运行此 DTrace 脚本来分析我的应用程序?
【发布时间】:2011-01-06 12:51:29
【问题描述】:

我在网上寻找可以帮助我进行装配线分析的东西。我在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 背景的人可以帮助我理解代码,保存它,运行它,并希望得到显示的结果。

【问题讨论】:

    标签: c scripting assembly profiling dtrace


    【解决方案1】:

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

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

    您将dtracescript.d 替换为您的脚本文件名。

    这假设您将 DTrace 作为系统的一部分(我运行的是 Mac OS X,自 Leopard 以来就一直使用它)。

    如果您对它的工作原理感到好奇,我不久前写了一篇关于使用 DTrace for MacResearch 的两部分教程,可以在 herehere 找到。

    【讨论】:

    • 非常感谢!我其实很好奇特别想看代码的解释!我有 linux Ubuntu ...如果 DTrace 不是 ubuntu 的一部分,我会安装它...编译后的代码是否需要任何标志?像 gcc -pg 还是不一定?
    • @Syntax_Error - DTrace 需要存在于内核级别,由于许可问题,它看起来不在 Linux 中:stackoverflow.com/questions/2059311/…。如果我没记错的话,您的可执行文件不需要任何特殊的编译器设置。至于脚本的作用,我会将您引向我链接到的文章,因为我在那里描述了一些语法并指出了其他资源以获取更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多