咱们基于上次的文章尝试在 iOS 上Debug Rust,iOS 编译和部署 Rust Library,并且我这里假设那篇文章中提到的工具你都已安装成功。ios
咱们的 debug 项目仍然是上篇文章的 debug 项目,项目地址在 GitHub 上。git
下载下来之后能够看到 basic 文件夹,里面有 ios 文件夹,打开 iOS 项目,运行。能够看到以下界面。github
输入你的名字,点击 “Greet me!”,能够看到 Rust 代码 work 了。app
好,接下来,咱们开始尝试直接 debug rust 项目。工具
咱们先用 Clion 打开 rust 项目,项目地址在 basic/cargo 下。同时咱们能够看到在 rust 编译产物文件夹 basic/cargo/target/ 中有不少不一样平台的产物。咱们是基于 iOS 模拟器调试的,因此咱们关注的平台是 x86_64
。post
咱们先清空 target 这个文件夹,而后在 Clion 的 terminal 中键入 cargo lipo --targets x86_64-apple-ios
,上篇文章中说了 lipo
是跨平台产物构建的利器,如今咱们使用它来构建一个模拟器的产物。如今回车,咱们能够看到 lipo
提示咱们完成,而且说明了产物是 [unoptimized + debuginfo]
,意思产物构建时没有优化,而且产物带上了吗debuginfo
。咱们知道 LLVM 编译 release 包的时候会作一些优化,代码的位置相对于咱们源码会有变化,那么这和咱们 debug 是有冲突的,咱们但愿咱们打的断点就在真实的源码位置,因此在 debug 产物,默认是把优化关闭了的。并且,咱们源码和编译产物的映射是存在 debuginfo
中的,因此 Rust 帮咱们带上了 debuginfo
。优化
如今咱们看到 target 文件夹以下。这个 x86_64
的产物就是咱们模拟器须要的。插件
如今咱们再回到 iOS 项目处,从新编译,这个时候发现编译会失败。Xcode 说连接不到 Rust 产物。确实连接不到了,咱们已经把原来的包删了。debug
咱们须要从新告诉 Xcode 如何连接咱们的 Rust 库。咱们把旧的连接给删除,而后添加咱们新的带debuginfo
的包所在的 debug 路径。3d
好,如今咱们从新运行,发现能运行成功了。OK,Stop Xcode 的运行。直接在模拟器启动刚才的 Greetings 应用。
咱们如今去到 Clion,按图选择 Attach to Process。
此时会出现以下界面,键入咱们的 APP 名称 Greetings。点选他。
而后能够看到 Clion attach 咱们的应用成功。
咱们如今去到 Rust 代码中打一个断点。而后再去模拟器中输入本身名字,点击 “Greet me!”。发现断点已经命中了。
可是这还不够,由于等 APP 彻底启动之后再开始 debug 这不能覆盖咱们全部 debug场景,好比有不少 APP 一启动就要作的事情咱们无法直接 debug。我会在下一篇文章和你们分享如何处理这种场景。敬请期待。
另外如今支持 Rust 项目 debug 的只有 Clion,因此安卓项目可能还须要等到 Rust 插件支持 Intellij 或者 Android Studio 的时候才能够支持真机调试。对了,官方进度在这里 GitHub。
在 Xcode 中 debug Rust 请看 Xcode 调试 Rust。
Enjoy! 😁