【问题标题】:How do I display this Log message in the Debug area using Xcode9?如何使用 Xcode9 在调试区域中显示此日志消息?
【发布时间】:2018-03-05 23:09:32
【问题描述】:

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


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

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

例如,我想使用 Xcode9 在 Debug 区域显示此字符串消息。

    NSString *outputData = @"This should show in Debug area";
    NSLog( @"text: %@", outputData );

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

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


编辑 1

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

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

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

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

    Unused variable 'outputData'

编辑 2

在 Xcode9 中设置 DEBUG=1 的位置似乎不同(参见下面)。

我使用几个 SO 帖子hereherehere(都很老)和even here确保更改 MyLog返回 NSLog)。在每种情况下,我都能够在问题导航器中报告相同的问题,但在调试控制台中却从来没有。 here 通过将文件复制到新项目中解决了类似的问题(Xcode5),但我想避免这种情况。

我几乎完成的应用程序到目前为止还不需要处理统一日志记录试图解决的任何复杂问题。但我在统一日志中观看了2016 WWDC video,并通读了它的幻灯片文件,寻找如何使用适当的 API 做一些基本操作的示例 - 将NSLog 实时打印到控制台区域 - 就像我在安装之前所做的那样Xcode9.这可能是错误的方法。但我想不出更好的方法。


编辑 3

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

换句话说,使用 Xcode9,新的日志记录 API确实NSLog, 一起工作,但仅适用于新项目,而不适用于使用早期版本的 Xcode 创建的项目。


启用 DEBUG 预处理器宏

【问题讨论】:

  • 我可以像以前一样在 XCode 9 中看到日志。您是否尝试过使用示例 prj?
  • Swift: print() vs println() vs NSLog() 的可能重复项。不完全是重复的。但是接受的答案涵盖了您所要求的所有内容以及更多内容!
  • 我不确定您所说的示例项目是什么意思。我正在尝试使用用于在调试区域中生成大量日志的现有项目。尽管无论我使用模拟器还是设备,这个项目都在继续构建和运行,但这些现在已经完全消失了。
  • 在 Xcode 9 控制台中,有一个小选择器可以选择“所有输出”、“调试器输出”和“目标输出”。你选择了哪个?另外,您说设置“DEBUG = 1”的位置看起来不像那个技术说明,但它在 Xcode 9 中对我有用。编辑您的问题以包括屏幕快照。 (顺便说一句,这仅在您使用“#if DEBUG` 模式时才相关。)底线,我无法重现您描述的行为,所以我建议您识别 the steps necessary for us to create blank project and reproduce the problem you describe
  • Rob,看看我的最新编辑。

标签: ios objective-c xcode xcode9


【解决方案1】:

在 preCompile 标头中替换这些定义后,在 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 的人可能会解释特定选项,但我很满意我有一个可行的解决方案。

参数

选项

【讨论】:

    【解决方案2】:

    试试这个。导航到:

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

    在 Xcode 中。

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

    确保已选中!

    希望对你有帮助

    【讨论】:

    • 巴拉兹,你已经接近了! OS_ACTIVITY_MODE 被禁用,我把它留空(检查了 OS_ACTIVITY_MODE),突然在控制台区域有一个日志,但没有调试日志,例如[MC] 延迟加载 NSBundle MobileCoreServices.framework, [MC] 加载 MobileCoreServices.framework, [MC] systemgroup.com.apple.configurationprofiles 路径的系统组容器是 /Users/gs/Library/Developer/CoreSimulator/Devices/08EEE25D-4D90 -4242-9DA6-932CF03AC9CA/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
    • Balázs,我已经解决了,部分原因是你给我的领导。 +1
    【解决方案3】:

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

    从那里,您将单击“编辑断点”,然后您会看到以下内容:

    从那里,您可以点击“操作”,您会看到这个菜单:

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

    这种方法的缺点是断点并不总是“粘”到您最初放置它的代码行。

    【讨论】:

    • 阿德里安,不知道我能做到这一点 (+1)。我现在在遇到断点时使用它来“弹出”。这比我当前的解决方法(即在 iPhone 屏幕上绘制 UIView)提供了更大的灵活性。将我的应用程序移动到应用程序商店(目前停留在 TestFlight 中)所需的最终编辑可能会被证明是有用的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多