C ++ stderr输出在OSX中的位置是什么?

时间:2014-04-14 18:40:31

标签: c++ xcode macos objective-c++ stderr

我正在使用一些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

1 个答案:

答案 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调试器等待特定进程启动并附加到它。