Создать NSTask для GDB - PullRequest
       6

Создать NSTask для GDB

1 голос
/ 30 апреля 2011

Я пытаюсь создать NSTask, который использует GDB для подключения к программе, но моя программа просто зависает после запуска задачи.Возможно ли это сделать?Вот код, который я использую:

NSTask  *task = [NSTask new];
[task setLaunchPath:@"/usr/bin/gdb"];
NSArray *args = [NSArray arrayWithObjects:@"TestApp.app", nil];
[task setArguments:args];
[task launch];
NSLog(@"Launched.");

NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
NSLog(@"Read data.");

Я уверен, что "TestApp.app" находится в правильном месте, потому что я не получаю ошибки "Нет такого файла или каталога"На консоли печатается только «Запущено».и вращающийся пляжный мяч просто продолжается больше минуты, пока я не убью бег.Есть идеи, что может сделать эту работу?

1 Ответ

1 голос
/ 30 апреля 2011

Некоторые вещи для рассмотрения:

  • Целесообразно установить канал для стандартного ввода .В некоторых ситуациях, в частности, когда вызывается NSLog(), это приводит к зависанию NSTask.

  • Если вы отправите -readDataToEndOfFile на стандартный дескриптор вывода, ваш поток приостановитсязадание завершено.Это особенно плохо, если этот код выполняется в главном потоке - никакие изменения пользовательского интерфейса или события приложения не будут обрабатываться, что, скорее всего, приведет к тому, что приложение будет расти.Вместо этого используйте методы …inBackground….

  • Вы не отправляете данные на стандартный ввод.Если gdb не получает никаких входных данных, он ожидает неопределенное время, пока не получит команду.

...