【问题标题】:lldb error: Couldn't lookup symbols. Swift iOSlldb 错误:无法查找符号。斯威夫特 iOS
【发布时间】:2018-12-25 22:42:15
【问题描述】:

使用 lldb,我想在我发布的 iOS 构建和发布动态框架中实例化一个 Swift 类。

我在模拟器上将 lldb 附加到我的发布版本。

主应用 - 工作

(lldb) exp let $c = hello_class()
error: <EXPR>:3:10: error: use of unresolved identifier 'hello_class'
let $c = hello_class()
         ^~~~~~~~~~~
(lldb) expr import My_App
(lldb) exp let $c = hello_class()
(lldb) po $c.hello()
???? hello ????

动态框架 - 失败

(lldb) dclass -m myframework
Dumping classes
************************************************************
myframework.RustyAppInfo

(lldb) expr import myframework
(lldb) expr let $d = RustyAppInfo()
error: Couldn't lookup symbols:
  __T011myframework12RustyAppInfoCACycfC

应用和动态框架都是在没有优化的情况下构建的。

更新

静态框架 - 失败

更改为 Xcode 9 引入的功能 - 静态 Swift 框架时,结果相同。

Xcode - 死代码剥离

默认情况下,使用 Swift 代码时,Dead Code Stripping 已打开。我查了一下是不是这个问题。结果没有区别。

【问题讨论】:

  • 有趣!也许编辑问题以包含“在调试器中附加它时来自框架”左右更具体,并希望能吸引专家:)
  • 那个符号是:myframework.RustyAppInfo.__allocating_init() -&gt; myframework.RustyAppInfo。在创建新对象时调用这似乎是一个合理的事情,但我不确定为什么它不存在于您的框架中。
  • 我未能将我的框架的 init 函数声明为 public @JimIngham。这就是找不到符号的原因。

标签: swift debugging lldb


【解决方案1】:

已解决

我在这篇文章中找到了我的答案:

http://iosbrain.com/blog/2018/01/13/building-swift-4-frameworks-and-including-them-in-your-apps-xcode-9/

我未能在框架内的 Swift 类上设置 public init()。 lldb可以调用的工作代码:

// set the Framework class to Public
public class rnHello{  

   // set the initializer to public, otherwise you cannot invoke class
    public init() {  

    }

    // set the function to public, as it defaults to internal
    public static func world() {  
        print("hello from a static method")
    }
}

现在您可以通过 Swift 代码或 lldb 访问它:

(lldb) po rnHello.world()
hello from a static method

【讨论】:

  • 请注意,问题不在于该方法本身是私有的。 lldb 的表达式解析器可以调用方法,无论它们是公共的还是私有的。这里的问题是,由于 init 不是公开的,编译器知道它可以推理它的所有用途,因此不需要发出未使用的风格,包括它需要从 lldb 生成对象的风格。当您将 init 公开时,swift 无法再推理其用途,而是必须发出任何可能被调用的内容。
猜你喜欢
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多