在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中的错误吗?这可能是我做过的事情的结果吗?
答案 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呈现为换行符等...