【问题标题】:Create NSTask for gdb为 gdb 创建 NSTask
【发布时间】:2011-04-30 10:15:24
【问题描述】:

我正在尝试创建一个使用 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”在正确的位置,因为我没有收到“没有这样的文件或目录”错误。控制台只打印“已启动”。旋转的沙滩球只持续了一分钟多,直到我结束了跑步。有什么想法可以使这项工作吗?

【问题讨论】:

标签: cocoa nstask


【解决方案1】:

需要考虑的一些事项:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多