【问题标题】:Swift LLBD Message "<Unable to determine byte size.>"Swift LLBD 消息“<无法确定字节大小。>”
【发布时间】:2015-10-26 01:04:13
【问题描述】:

当我试图打印出对象的描述时,我在 Swift 调试器中遇到了一个非常烦人的问题。当尝试打印和反对时,无论是使用 po 命令还是 fr v 命令,我都会收到类似

的消息

error: <EXPR>:1:1: error: use of unresolved identifier 'self' self ^

self = &lt;Unable to determine byte size.&gt;

这里发生了什么?调试器无法读取self 之类的内容是否有原因?

【问题讨论】:

  • 我也遇到了这个问题。不仅为自己,而且为框架中的许多变量。正如其他人所建议的那样,我已将 SWIFT_OPTIMIZATION_LEVEL 和 GCC_OPTIMIZATION_LEVEL 设置为 None,但这没有任何效果。
  • 是的,我遇到的这个问题不仅仅是selffr v 的完整打印输出通常会包含其他内存变量的详细信息,并且打印这些变量没有问题。我怀疑调试器无法分析某种对象类型,它是我无法打印的所有不同对象的成员,但我不知道这种有问题的对象类型会具有哪些属性会导致这种情况。

标签: swift debugging lldb


【解决方案1】:
<Unable to determine byte size>

是 LLDB 在不理解某事的类型时将打印出来的(诚然有些神秘)错误消息。

让我再详细一点。当您键入表达式或执行框架变量时,调试器必须评估您提供的任何代码,或查找您要求的变量。

为了将结果呈现给您,它还必须了解事物的类型。例如,一个 Int 是一个有一个数值的东西,它的大小与你机器上的指针大小相匹配,......(嗯,100% 精确,一个 Int 是一个有一个具有数值的成员的东西。 ..,但 LLDB 将其从您那里抽象出来)。 String 是一个有一些文本的东西(同样,它有点棘手,但 LLDB 抽象了它)。调试器想知道的一件事是一个类型的“字节大小”,比如这种类型的对象在内存中占用了多少字节?

有时,调试器无法理解所讨论的类型。显然,当这种情况发生时,无法确定的事情之一就是字节大小。因此,消息。

如果您遇到调试器无法在您的应用中推断类型的情况,请提交错误http://bugreport.apple.com

【讨论】:

  • 什么样的信息会在关于这个问题的错误报告中有所帮助?据我所知,只要我尝试检查的对象引用了我项目中的特定类,就会出现这个问题。我不能真正分享课程本身(这是为了工作,保密),但是什么样的信息会有助于传递?
【解决方案2】:

正如 Scott D 所提到的,这可能与 Fabric 有关。如果您使用 Fabric,尤其是 TwitterKit,请转到 TwitterKit 框架并手动编辑 TwitterKit.h。 替换

#import &lt;TwitterCore/TwitterCore.h&gt;

@import TwitterCore;

使调试器再次可用。旁注:Fabric 和 Crahlytics pod 已更新,不再破坏调试器。

编辑: Fabric 中的 Twitter pod 也进行了更新,从 1.12.0 版开始,它们不会破坏调试器。耶!

【讨论】:

    【解决方案3】:

    在我的案例中,经过大量研究和测试,我发现第 3 方插件“Crashlytics”和“TwitterKit”(在我的案例中是通过 cocoapods 安装的)对我造成了这个问题。删除这些库并进行清理然后构建后,我能够再次正确使用 LLDB。

    https://stackoverflow.com/a/26451537/2138077

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 2012-06-25
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多