我正在使用一些Objective-C ++代码,该代码从我的主应用程序启动后台进程。后台进程没有GUI,只运行一会儿,必须从主应用程序运行才能使用它。这意味着我不能轻易地使用Xcode附加到后台进程或独立运行它,所以我需要依赖输出到stderr。
在这种情况下,我应该在哪里寻找stderr输出?
如果我提出错误的问题,请提供更多信息:我使用的是旧版本的Xcode(3.2.6),原因与我正在维护的项目的年龄有关。我正在处理异常处理/报告代码,因为GDB喜欢捕获异常而不是让代码执行代码,因此很难逐步执行代码。后台进程仅在主应用程序中发生结构化异常时启动。
我的主应用程序上lsof命令的结果摘录可能是相关的:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
<appname> 2788 <username> 0r CHR 3,2 0t0 311 /dev/null
<appname> 2788 <username> 1w CHR 3,2 0t473379 311 /dev/null
<appname> 2788 <username> 2w CHR 3,2 0x6d545f8 311 /dev/null
答案 0 :(得分:1)
您可以使用lsof
命令找出特定文件描述符的重定向位置:
lsof -a -p <your pid> -d 0,1,2
当启动后台进程时,通常将子进程附加到与父进程相同的标准流。对于普通的Cocoa应用程序,默认情况下,您应该能够在“所有消息”下的“Console.app”中看到该输出。或者&#39;控制台消息&#39;。
在Mountain Lion之前,您还可以在那里查看launchd服务的输出,但我相信自那时起启动将stdout和stderr重定向到/ dev / null。
这意味着我无法使用XCode轻松附加到后台进程或独立运行
如果您可以从Xcode运行主应用程序,您应该能够将调试器设置为附加到它启动的子进程。
还可以告诉Xcode调试器等待特定进程启动并附加到它。