我知道任务会返回一个标准错误的值,我可以通过输入“echo $?”看到在手动运行任务后在终端中。
现在这段代码:
[aTask launch];
[aTask waitUntilExit];
int status = [aTask terminationStatus];
看起来不错,但是gdb说 status 是位于0x0的位置,无法访问。有人知道Xcode中NSTask对象中的任何错误吗?我做错了吗?
感谢您的回复。
答案 0 :(得分:5)
实际上,任务执行正常,并通过返回状态为0退出并显示成功。当您在终端中回显结果时,它是否为0?
来自您对问题的评论:
这是来自我的gdb之后的行 上面的代码执行:( gdb)po status无法访问地址处的内存 0x0 - demonslayer319
int
不是对象;因此,po status
将不起作用。 po
通过向对象发送-description
来工作,但它的方式与普通的objc_msgSend()
调用略有不同。因此,当gdb尝试将值0视为对象的地址时,gdb会检测到它可能无效,因为0
作为地址无法解除引用。
请尝试p status
。
(并且,是的,任务可能是零 - 你没有正确地创建任务 - 因此, nil-eats-message 导致状态为0)
答案 1 :(得分:1)
您确定要创建的任务是否真的已创建?除了diciu的响应,如果aTask为nil,-[NSTask terminationStatus]
将返回零。这是因为返回对象的nil消息返回nil,返回原语的消息返回0,0.0f,NO等。
通常你用+[NSTask launchedTaskWithLaunchPath:arguments:]
创建一个NSTask实例,而在这里创建失败通常是由于路径不正确或nil参数引起的,这会产生异常。由于您没有提及任何异常并且没有发布您用于创建任务的代码,因此很难说这是否是问题。