c++ - C++ stderr 输出在 OSX 中的哪里?

标签 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

最佳答案

您可以使用 lsof 命令找出特定文件描述符被重定向到的位置:

lsof -a -p <your pid> -d 0,1,2

启动后台进程时,子进程通常与父进程附加到相同的标准流。默认情况下,对于普通的 Cocoa 应用程序,您应该能够在“所有消息”或“控制台消息”下的 Console.app 中看到该输出。

在 Mountain Lion 之前,您还可以在那里查看 launchd 服务的输出,但我相信此后 launchd 会将 stdout 和 stderr 重定向到/dev/null。


This means I can't easily attach to the background process with XCode or run it stand-alone

如果您可以从 Xcode 运行主应用程序,您应该能够将调试器设置为附加到它启动的子进程。

Xcode 调试器也可以被告知等待特定进程启动并附加到它。

关于c++ - C++ stderr 输出在 OSX 中的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067732/

相关文章:

c - Linux 中的 malloc 错误,相同的代码在 Mac OS X 上运行良好

xml - 如何更改关于窗口中的版本号 (Mac)

html - border-color 在 OSX/IOS 上适配颜色属性

c++ - 将命令行参数程序转换为菜单驱动程序

c++ - 启用 arch :SSE2 makes program slower

c++ - 如何将 32 位有符号整数值转换为 C 中等效的 64 位有符号整数

c++ - 带有自定义删除器和分配器的shared_ptr

ios - XCode 8.1 更新框架不起作用

ios - UITabBar - 更新 alpha 值并渲染它? ( swift )

ios - uiwebview swift 3 页面不滚动