【发布时间】:2014-05-28 20:44:01
【问题描述】:
我正在使用一些从我的主应用程序启动后台进程的 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
【问题讨论】:
-
您是否查看过控制台(在“
/Application/Utilities/”中找到的应用程序? -
@Michael 是的,控制台是我看过的地方之一。我不确定我应该在控制台的哪个位置看到 stderr 输出,因为有很多不同的日志/过滤器/文件/等。我什至不知道是否有任何内容成功写入 stderr,因为我不知道应该将其写入何处。
-
@Ben:后台进程是怎么启动的?
-
@MartinR 后台进程由我正在使用的框架中的现有代码启动。本质上,该进程被配置为在它收到一条 mach 消息时运行,然后发送一条消息来启动它。
-
@Ben:如果守护进程是由一些自定义代码启动的,那么它可能是 stderr 被重定向到 /dev/null (你没有机会阅读它)。
标签: c++ xcode macos objective-c++ stderr