Cocoa 为gdb创建NSTask
我正在尝试创建一个使用GDB连接到程序的NSTask,但我的程序在启动任务后就冻结了。这可能吗?以下是我正在使用的代码:Cocoa 为gdb创建NSTask,cocoa,nstask,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
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”在正确的位置,因为我没有收到“没有这样的文件或目录”错误。控制台只显示“启动”,旋转的沙滩球只持续一分钟,直到我结束跑步。有什么办法可以让这一切顺利吗 需要考虑的一些事情:
- 这样做是明智的。在某些情况下,特别是调用
时,会挂起NSLog()
NSTask
- 如果将
发送到标准输出句柄,线程将暂停,直到任务完成执行。如果代码在主线程上运行,这尤其糟糕——不会处理任何用户界面更改或应用程序事件,这很可能导致应用程序搁浅。请改用-readdatatoendofile
方法…inBackground…
- 您没有将数据发送到标准输入。如果
没有收到任何输入,它将无限期地等待,直到收到命令gdb
- 这样做是明智的。在某些情况下,特别是调用
时,会挂起NSLog()
NSTask
- 如果将
发送到标准输出句柄,线程将暂停,直到任务完成执行。如果代码在主线程上运行,这尤其糟糕——不会处理任何用户界面更改或应用程序事件,这很可能导致应用程序搁浅。请改用-readdatatoendofile
方法…inBackground…
- 您没有将数据发送到标准输入。如果
没有收到任何输入,它将无限期地等待,直到收到命令gdb
- 需要考虑的一些事情: