是否有Instruments API?

时间:2010-12-20 01:05:49

标签: objective-c cocoa xcode instruments

是否可以通过我的代码以编程方式设置仪器?例如,我想构建我的代码,其中startTrace可能为当前线程设置特定探测并在stopTrace停止录制时开始录制。我将使用作为此问题主题的Instruments API编写这些例程的内容。

-(void)myInterestingMethod
{
    [self startTrace];

    // do something interesting and performance critical

    [self stopTrace];
}

如果上述方法不可用,那么设置我自己的DTrace探针是否可行?

1 个答案:

答案 0 :(得分:4)

看起来没有任何直接的东西,但有一个instruments命令行工具。下面是一些快速+脏代码,它们将调用它并为调用进程提供CPU使用率

static void sampleMe() {
    // instruments -t '/Developer/Applications/Instruments.app/Contents/Resources/templates/CPU Sampler.tracetemplate' -p 26838 -l 5000

    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:@"/usr/bin/instruments"];
    [task setArguments:[NSArray arrayWithObjects:
                        @"-t",
                        @"/Developer/Applications/Instruments.app/Contents/Resources/templates/CPU Sampler.tracetemplate",
                        @"-p",
                        [NSString stringWithFormat:@"%ld", getpid()],
                        @"-l",
                        @"5000",
                        nil]];
    [task setCurrentDirectoryPath:NSHomeDirectory()];
    [task setStandardInput:[NSPipe pipe]];
    [task setStandardOutput:[NSPipe pipe]];
    [task setStandardError:[NSPipe pipe]];
    [task launch];
    // purposely leak everything since I can't be bothered to figure out lifetimes
}

调用后,名为instrumentscli0.trace的文件将位于您的主目录中。

更新:Instruments 4.0在适用于iOS应用的DTPerformanceSession中提供DTSendSignalFlag