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

时间:2015-05-07 01:24:00

标签: ios debugging

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

(lldb) p [thisUIView recursiveDescription]
(__NSCFString *) $16 = 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"

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

这里发生了什么?这是recursiveDescription中的错误吗?这可能是我做过的事情的结果吗?

1 个答案:

答案 0 :(得分:0)

当lldb打印任何类型的字符串时,它会以原始方式打印它们。通常,在进行调试时,您希望查看字符串的实际内容,并使用文字&#34; \ n&#34;等。

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

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

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

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

然而,po - 即打印对象 - 旨在为您提供漂亮的显示。因此,如果您使用po而非p来打印对象,则不会被截断,我们会将其打印到控制台,并且所有\ n&# 39; s呈现为换行符等...