Есть ли API инструментов? - PullRequest
       7

Есть ли API инструментов?

4 голосов
/ 20 декабря 2010

Можно ли настроить запуск инструментов программно из моего кода?Например, я хотел бы структурировать мой код примерно так: startTrace может установить конкретный зонд для текущего потока и начать запись, в то время как stopTrace остановит запись.Я хотел бы написать содержание этих подпрограмм, используя Instruments API, который является предметом этого вопроса.

-(void)myInterestingMethod
{
    [self startTrace];

    // do something interesting and performance critical

    [self stopTrace];
}

Если вышеперечисленное недоступно, является ли установка моего собственного датчика DTrace реальной альтернативой?

1 Ответ

4 голосов
/ 22 января 2011

Не похоже, что есть что-то прямолинейное, но есть инструмент командной строки instruments.Вот некоторый быстрый + грязный код, который вызовет его и пример использования ЦП для вызывающего процесса

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 предлагает DTSendSignalFlag в DTPerformanceSession для приложений iOS.

...