如何使用 Xcode9 在调试区域中显示此日志消息?

How do I display this Log message in the Debug area using Xcode9?

This 看起来很有希望,但似乎不是重复的问题,因为它解决了 Swift 中的问题。


我正在完成一个现有的 Objective C 项目,但是当我更新到 Xcode 9 时 NSLog 消失了。所以我正在寻找 Xcode 中的一些设置,让我继续使用 NSLog 来微调项目。

使用 Swift 和 Objective-C 应用程序的日志记录的基本调试在 Xcode 9 中似乎已发生变化,因为 NSLog 消息不再出现在调试区域中。设置 DEBUG=1 的 window 不再像 Figure 2 The DEBUG preprocessor macro setting in an Xcode project.

例如,我想在调试区使用 Xcode9.

显示这个字符串消息
    NSString *outputData = @"This should show in Debug area";
    NSLog( @"text: %@", outputData );

我研究了最新的文档 here or here,但到目前为止没有帮助。可能还值得注意的是,以前当我 运行 项目时,调试区域会自动打开。自安装 Xcode9 后,它不再那样做。

希望下面编辑中提供的额外信息 会向我尚未查看的人提供建议。谢谢。


编辑 1

在控制台区域 - 即调试区域的右下部分 - 我选择了 All Output。所以我尝试使用 Debugger outputTarget output 但仍然没有日志。

我在 Prefix.pch 文件中添加了这些语句

#ifndef DEBUG
#define NSLog(...) /* suppress NSLog when in release mode 
#endif

当我运行问题导航器中出现以下代码时。

    Unused variable 'outputData'

编辑 2

DEBUG=1在Xcode9中似乎有不同的地方设置(见下面)。

我使用几个 SO 帖子 here, here, here (all quite old) and even here (making sure to change MyLog back to NSLog). And in each case I was able to report the same issue in the Issue navigator but never in the Debug console. A similar problem (with Xcode5) was solved here 中建议的示例将 DEBUG 宏插入到 .pch 文件中,方法是将文件复制到新项目中,但我想避免这种情况。

我的应用程序几乎完成了,到目前为止还没有处理统一日志记录试图解决的任何复杂问题。但是我在统一日志记录上观看了 2016 WWDC video 并通读了它的幻灯片放映文件,以寻找如何使用适当的 API 来做一些基本的事情的例子 - 将 NSLog 实时打印到控制台area - 安装前的方法 Xcode9. 这可能是错误的方法。但我想不出更好的方法。


编辑 3

值得注意的是,当我使用Xcode9和运行上述代码创建一个新的Objective C项目时,控制台区域出现了字符串消息。

换句话说,使用 Xcode9 新的日志记录 API 可以与 NSLog, 一起使用,但仅适用于新项目而不是对于使用 Xcode.

的早期版本创建的

启用调试预处理器宏

与其将调试语句写入代码,不如尝试放入一个断点,右键单击它,然后选择 "Edit Breakpoint"。你应该看到这个菜单:

从那里,您将单击 "Edit Breakpoint",您将看到以下内容:

从那里,您可以单击 "Action",您将看到这个菜单:

您可以输入打印消息(例如:myMethodCalled)或变量值(myIntValue = @myIntValue@),或者您可以键入调试器命令以在代码中的那个位置执行(例如:po dump(myArray)).

这种方法的缺点是断点并不总是 "sticky" 您最初放置它的代码行。

试试这个。导航至:

产品 -> 方案 -> 编辑方案 -> 运行 -> 参数 -> 环境变量

在 Xcode.

添加 OS_ACTIVITY_MODE 并将值设置为 disableleave it empty

确保已勾选!

希望对您有所帮助

在预编译 header

中替换这些定义后,Xcode9 的控制台区域中启用了调试日志
    #ifndef DEBUG
    #define NSLog(...) /* suppress NSLog when in release mode */ 
    #endif

与以下

    #ifdef __DEBUG__
    #define NSLog(...) /* suppress NSLog when in release mode */
    #endif

Arguments 的环境变量是根据答案 above 设置的,另外还设置了 Options. 更熟悉统一日志记录的人 API 可能会解释特定的选项,但我很满意我有一个可行的解决方案。

参数

选项