Xcode 4.3 断点记录对象描述

Posted

技术标签:

【中文标题】Xcode 4.3 断点记录对象描述【英文标题】:Xcode 4.3 Breakpoint Logging object descriptions 【发布时间】:2012-04-19 16:08:02 【问题描述】:

我想从所有地方的 NSLogging 转移到使用断点进行日志记录,其中性能影响不排除它。

我知道我可以po 使用 Debugger Command 操作的对象,并且我知道我可以通过选择 Log Message 操作来记录任何字符串。

而且我认为我应该能够通过选择 Log Message 并输入类似 SomeText giving context for object description: @(const char *)[[anObject description] UTF8String]@ 的内容来结合两者。不幸的是,这似乎不起作用,并且总是给我我认为是指向描述字符串的指针。

我做错了什么?

【问题讨论】:

【参考方案1】:

这有点棘手,但我认为这会奏效。将断点 Action 设置为调试器命令。然后将此文本用作操作:

po (NSString *) [@"Some text describing: " stringByAppendingString:(NSString *)[anObject description]]

在调试器中工作时必须非常小心地转换返回类型。使用 GDB 和 LLDB。

我喜欢你使用断点来避免性能下降的想法,但这也意味着只有在连接到调试器时才会打印你的日志。而 NSLogs 会将它们的输出缓冲到系统日志中,可以从 Xcode 中的 Organizer (Devices) 中查看。

【讨论】:

谢谢,这听起来像是一个可行的解决方案(尽管它没有直接回答日志操作发生的情况)。实际上,根据我的经验,断点日志记录比使用 NSLog 慢得多,但有时,我不想在我的源代码中喷洒 NSLog。 也许还有我无法回答的问题?我希望您在帖子中输入的表达式的结果只是一个指针。我发布的代码是否可以帮助您实现相同的目标,并且您正在寻找一种不同的方式来实现它? 我奖励了你,因为它解决了我在断点日志记录方面遇到的实际问题。我认为我的问题中的表达式会打印一个字符串,而不仅仅是指向字符串的指针。【参考方案2】:

(编辑:我错过了问题的重点,这不是答案)

我认为最好使用DebugLog。它是一个,您可以轻松禁用它(当您在调试版本中def-ine DEBUG 时它处于打开状态,而当您不使用define 时它处于关闭状态)。因此,没有性能下降(恰恰相反)。

简单替换

NSLog(@"Hello, World!");

DebugLog(@"Hello, World!");

而不是

19/4/12 8:55:52.949 PM Dictionary: Hello, World!

你会得到:

BetterDictionary.m:737 Hello, World!

(它显示了哪个文件甚至哪一行记录了它)

这更有趣。 undefine DEBUG 用于您的生产构建,DebugLog 将不会被调用

别忘了#import 'DebugLog.h'

【讨论】:

感谢您的建议,但这并不能真正回答我的问题。 @fzwo 是的,我在提交答案后立即明白,我完全错过了问题的重点,正要删除你评论过的问题......不过我会把它留在这里,因为它可能对可能查看它的其他人来说是新的。

以上是关于Xcode 4.3 断点记录对象描述的主要内容,如果未能解决你的问题,请参考以下文章

关于 Xcode 4.3 中的自动发布

错误:执行被中断,原因:断点 1.2。 Xcode 7.1,斯威夫特

添加选项卡栏项 (UITabBar) 时 XCode 4.3 崩溃

Xcode:升级到 Xcode 4.4 后如何恢复 4.3 模拟器? [复制]

如何强制安装 Xcode 4.3?

卸载 Xcode 4.3