recursiveDescription 不打印完整的层次结构并包括转义的换行符

recursiveDescription not printing full hierarchy and includes escaped line breaking

在 Xcode 6.3.1 中,当使用递归描述时,我经常得到如下输出:

(lldb) p [thisUIView recursiveDescription]
(__NSCFString *)  = 0x132f4b90 @"<UIVIew: 0x1eb14d30; frame = (0 0; 768 314); clipsToBounds = YES; opaque = NO; layer = <Layer: 0x1e850160>>\n   | <UIVIew: 0x134ae410; frame = (724 0; 44 82); opaque = NO; gestureRecognizers = <NSArray: 0x134a8560>; layer = <Layer: 0x134b2080>>\n   |    | <UIVIew: 0x134f5690; frame = (0 0; 44 82); opaque = NO; autoresize = W+H; layer = <Layer: 0x1ea360c0>>\n   | <UIVIew: 0x1ea3d160; frame = (724 82; 44 58); opaque = NO; gestureRecognizers = <NSArray: 0x134f71d0>; layer = <Layer: 0x1349b1d0>>\n   |    | <UIVIew: 0x1ea3d520; frame = (0 0; 44 58); opaque = NO; autoresize = W+H; layer = <Layer: 0x134a7a40>>\n   | <UIVIew: 0x132dc560; frame = (724 140; 44 29); opaque = NO; gestureRecognizers = <NSArray: 0x132f6b30>; layer = <Layer: 0x132dc600>>\n   |    | <UIVIew: 0x132eee40; frame = (0 0; 44 29); opaque = NO; autoresize = W+H; layer = <Layer: 0x132dc660>>\n   | <UIVIew: 0x1349cae0; frame = (724 169; 4"

注意返回的字符串如何包含转义换行符“\n”,以及字符串如何突然停止?对象 thisUIView 有 8 个子对象,其中只有四个正在打印。

这里发生了什么?这是递归描述中的错误吗?会不会是我做某事的结果?

当 lldb 打印任何类型的字符串时,它会以原始方式打印它们。通常,当您调试时,您希望看到字符串的实际内容,包括文字“\n”等。

此外,lldb 会在设置值处截断字符串打印:target.max-string-summary-length,默认情况下为 1024。这主要是为了防止它在遇到未终止的字符串时发疯。

要查看更长的字符串,请执行以下操作:

(lldb) settings set target.max-string-summary-length <SomeLargeNumber>

请注意,print 旨在为您提供 NSString 的 "rawer" 视图(原始因为 NSString 本身是一个复杂的野兽,并且可能无法将其内容保存在一些不错的单个错误中。 ..).

但是,po - 即 print-object - 旨在为您提供漂亮的展示。所以在你的情况下,如果你使用 po 而不是 p 来打印对象,它不会被截断,我们会将它打印到控制台,所有 \n 都呈现为换行符等...