使用 Xcode 调试 Kotlin IOS 主要代码

问题描述 投票:0回答:1

我的 XCODE 版本 15.4 上安装了最新的 xcode-kotlin 插件。 (顺便说一句,最新版本的 xcode-kotlin 插件使用brew 安装在 Xcode 15.4 上,无需安装过程中所述的额外安装解决方法!)使用 Xcode-kotlin 插件无疑是一个很大的帮助。设置断点并单步执行代码效果很好。问题是我无法查看 iosMain 中存储的帧变量的内容。例如,在我的 iosMain 中,我在 iOS 实际类的实现中定义了以下变量:

 var pathUrl: NSURL?

变量在该类的构造函数中设置:

     actual constructor(pathname: String) {
         pathUrl = NSURL.URLWithString(pathname)
     }

我能够单步执行代码并在该行处中断。问题是我无法从 lldb 查看“pathURL.path”的值。从 lldb 控制台,我可以执行以下操作:

 (lldb) frame variable _this->pathUrl
 (ObjHeader *) _this->pathUrl = []

这很好,但我想查看该变量的路径值。我已经尝试了多种方法将该变量强制为 (NSURL *),但我还没有找到成功做到这一点的方法。在这种情况下,NSURL 来自 Kotlin“platform.Foundation”。我的理解是它是 Apple NSURL 类的 Kotlin 包装类。我可以毫无问题地看到来自堆栈的“路径名”等变量。请注意,我显然知道我要设置的路径是什么;我只是用这个作为例子,我真正的问题是,如果该框架变量是“platform.Foundation”类,我似乎看不到共享“iosMain”中包含的框架变量的值。另请注意,我尝试在构造函数中设置其值后查看 pathUrl.path 。我稍后也无法在引用 pathUrl 的另一种方法中查看 pathUrl 的内容。

此时,我认为这是由于 Xcode-kotlin 插件的限制,因为它没有足够的有关“platform.Foundation”符号的信息。所以我要问的基本问题可以归结为:

 1.) Is there a way for me to view the contents of this frame variable using lldb?, or
 2.) Is there a way for me to let Xcode-kotlin plugin know about "platform.Foundation" symbols?
ios xcode kotlin kotlin-multiplatform
1个回答
0
投票

(上下文,我编写了 Xcode Kotlin 插件,或者至少是主要的 lldb 集成。团队在安装工具和其他修复方面做得非常出色)

由此假设:

这很好,但我想查看该变量的路径值。

在终端中运行调试命令没有帮助。这不是“Xcode-Kotlin 插件”问题。这是一个 Kotlin lldb 问题。

Xcode-Kotlin 插件并不真正直接执行任何“调试”工作。该插件本身只是通知 Xcode Kotlin 是可调试的源代码,并初始化 Kotlin lldb 脚本。它还设置 Kotlin 代码的样式,但这对于核心功能并不重要。

Kotlin lldb 脚本是核心 Kotlin 的一部分。我们确实提供了原始优化,使其可以从可视化编辑器(Xcode 和当时的 App Code)使用,但实际的 lldb 功能全部由 lldb 脚本处理,该脚本由 Kotlin 团队维护。我们曾经有一个“轻微优化”的版本,添加了一些他们删除的优化(公平地说,维护起来会很糟糕),但 JetBrains 在“ Android Studio KMM 插件年”,所以我们只使用库存插件。

TL;DR lldb 和 Kotlin 存在一些问题,但如果不对 lldb 脚本进行一些认真的编辑,当然也不包括与 lldb 脚本通信的 Kotlin 核心代码,我们无能为力。

© www.soinside.com 2019 - 2024. All rights reserved.