Swift LLDB消息“无法确定字节大小,”

mxg2im7a  于 2023-02-03  发布在  Swift
关注(0)|答案(5)|浏览(93)

我在Swift调试器中遇到了一个非常烦人的问题,当我试图打印一个对象的描述时,无论是使用po命令还是fr v命令,我都会收到如下消息
error: <EXPR>:1:1: error: use of unresolved identifier 'self' self ^

self = <Unable to determine byte size.>
这是怎么回事?调试器不能读取类似self的内容有什么原因吗?

cygmwpex

cygmwpex1#

<Unable to determine byte size>

是当LLDB不理解某个对象的类型时,它将打印出的错误消息(当然有些隐晦)。
让我再详细说明一下,当你输入一个表达式,或者一个框架变量时,调试器必须评估你提供的任何代码,或者查找你要求的变量。
为了向你呈现结果,它还必须理解事物的类型。例如,Int是一个具有数值的事物,其大小与你机器上的指针大小相匹配,...(好吧,为了100%精确,Int是一个包含一个数值成员的事物......但是LLDB把它抽象出来了)字符串是一个有文本的东西(同样,这有点棘手,但LLDB对此进行了抽象)调试器喜欢知道的一件事是类型的“字节大小”,例如,这种类型的对象在内存中占用多少字节?
有时候,调试器无法理解正在讨论的类型。当这种情况发生时,很明显,无法确定的事情之一是字节大小。因此,消息。
如果您遇到调试器无法推断应用中的类型的情况,请提交错误http://bugreport.apple.com

xytpbqjk

xytpbqjk2#

正如Scott D提到的,这可能是Fabric的问题。如果你正在使用Fabric,特别是TwitterKit,请转到TwitterKit框架并手动编辑TwitterKit. h。
#import <TwitterCore/TwitterCore.h>

@import TwitterCore;
使调试器再次可用。Fabric和Crahlytics pod已更新,不再中断调试器。
编辑:twitterpod从fabric也被更新了,从1.12.0版本开始,他们不会破坏调试器。耶!

zpgglvta

zpgglvta3#

在我的例子中,经过大量的研究和测试,我发现第三方插件"Crashlytics"和"TwitterKit"(在我的例子中是通过cocopods安装的)导致了这个问题。在删除了这些库并进行了清理和构建之后,我能够再次正确使用LLDB。
参见https://stackoverflow.com/a/26451537/2138077

9gm1akwq

9gm1akwq4#

我有间歇性的问题。清理构建文件夹并重新构建可以解决这个问题。(产品-〉清理构建文件夹)

gmxoilav

gmxoilav5#

如果要打印的值是可选的,请尝试使用nil-coalescing操作符(??)使其成为非可选的。

相关问题