c - 如何运行此 DTrace 脚本来分析我的应用程序?

标签 c scripting assembly profiling dtrace

我在网上搜索可以帮助我进行流水线分析的东西。我在 http://www.webservertalk.com/message897404.html 上搜索并找到了一些东西

这个问题有两个部分;查找特定类型(inc、add、shl 等)的所有指令以确定分组,然后找出正在执行的指令并正确求和。第一点很棘手,除非通过反汇编程序进行分组就足够了。为了确定正在执行哪些指令,Dtrace 当然是您的 friend (至少在用户领域)。

最好的方法是仅在每个基本 block 的开头使用 instrument;现在找到这些将是一个手动过程......但是,检测每条指令对于小型应用程序是可行的。这是一个例子:

首先,我们正在测试的非常简单的 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/

相关文章:

c - 删除数组中重复的以下单词

c++ - Flash 和 C++ 的脚本语言?

assembly - 如何使用 GCC 生成一个最小的 BIOS hello world 引导扇区,使其可以在真实硬件上的 USB 内存棒上运行?

assembly - 如何在 assembly 中打印星形三角形?

c++ - 避免C和C++代码混用的做法或方法

c++ - C、C++ 从二进制文件中提取结构成员

c - 从路径获取文件夹

bash - 无法使用 Bash Shell 脚本在 Ubuntu 上创建目录

javascript - "Access is denied"通过在 Windows XP x64 上使用 JScript 执行 .hta 文件

c - 汇编寄存器算术?