Vya*_*cov 6 debugging console xcode objective-c lldb
例.我在旧项目中编写了以下字符串,并使用了一个新的,明确的字符串:
UIInterfaceOrientation k = [UIApplication sharedApplication].statusBarOrientation;
清晰项目的控制台输入输出:
(lldb) po k
UIInterfaceOrientationLandscapeLeft
如果我写"po k" - 一个无用的整数列表,那么在我的旧项目中有些糟糕.
另外,我不能在新项目中打印大多数对象.
Jim*_*ham 13
我不知道你的情况是怎么回事,但是大家都明白了po&之间的区别p:
的p命令(又名expr --)取它被给定的参数,编译他们就好像它们是写在当前帧的上下文中,源代码表达式,执行的结果-或者通过其上运行的编译的结果的解释,如果这是可能的,或者通过JITing编译结果,将其插入目标程序,然后在那里运行.然后打印评估结果.
该po命令(又名expr --O --)做的一切p做,但而不是打印结果,如果结果是一个指向ObjC对象,它会调用该对象的"描述"的方法,并打印通过该方法(*)返回的字符串.同样,如果结果是CF对象,它将调用CFShow并打印结果.如果这两个尝试都失败了,它将继续并按原样打印结果p.
所以po大多数都喜欢p.但是如果你使用po它实际上不是对象的东西,你可以得到一些奇怪的结果.例如,ObjC有一个优化(标记指针),表示对象指针中某些对象(例如NSNumbers)的内容.没有一个"真正的"对象,只是一个煮熟的指针.因此,如果您尝试po使用恰好看起来像标记指针的整数,您将获得一些可能不相关的ObjC对象的描述,而不是整数的值.
当然,po正在做更多的工作,所以除非你真的想要一些对象的描述,否则p效率更高.
有兴趣了解更多的人:https : //developer.apple.com/videos/play/wwdc2019/429/
添加此作为可见性的答案,还解释了每个调试命令的功能
po尝试将您要打印的内容视为对象。在许多情况下它与 类似p,但也有一些情况会出现差异。
查看差异的最简单方法:比较p 0和的输出po 0。
(lldb) p 0
  (int) $26 = 0
(lldb) po 0
  <nil>
Vya*_*cov -2
Strip debug symbols during copy
在大多数答案中,他们建议将优化设置为“无”,但忘记该选项应设置为“否”(至少对于调试配置)。