咱們基於上次的文章嘗試在 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! 😁