为gdb创建NSTask

时间:2011-04-30 01:47:03

标签: cocoa nstask

我正在尝试创建一个使用GDB附加到程序的NSTask,但是我的程序在启动任务后就冻结了。这可能吗?这是我正在使用的代码:

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 个答案:

答案 0 :(得分:1)

需要考虑的一些事项:

  • set a pipe for standard input是明智的。在某些情况下,特别是在调用NSLog()时,最终会挂起NSTask

  • 如果将-readDataToEndOfFile发送到标准输出句柄,则线程将暂停,直到任务完成执行。如果代码在主线程上运行,那么这一点尤其糟糕 - 没有用户界面更改或应用程序事件将被处理,这很可能最终导致应用程序失误。请改用…inBackground…方法。

  • 您没有向标准输入发送数据。如果gdb没有收到任何输入,它会无限期地等待,直到收到命令为止。