iOS 除錯 Rust
我們基於上次的文章嘗試在 iOS 上Debug Rust,iOS 編譯和部署 Rust Library,而且我這裡假設那篇文章中提到的工具你都已安裝成功。
我們的 debug 專案仍然是上篇文章的 debug 專案,專案地址在 GitHub 上。
下載下來以後可以看到 basic 資料夾,裡面有 ios 資料夾,開啟 iOS 專案,執行。可以看到如下介面。
輸入你的名字,點選 “Greet me!”,可以看到 Rust 程式碼 work 了。
好,接下來,我們開始嘗試直接 debug rust 專案。
我們先用 Clion 開啟 rust 專案,專案地址在 basic/cargo 下。同時我們可以看到在 rust 編譯產物資料夾 basic/cargo/target/ 中有很多不同平臺的產物。我們是基於 iOS 模擬器除錯的,所以我們關注的平臺是 x86_64
我們先清空 target 這個資料夾,然後在 Clion 的 terminal 中鍵入 cargo lipo --targets x86_64-apple-ios
,上篇文章中說了 lipo
是跨平臺產物構建的利器,現在我們使用它來構建一個模擬器的產物。現在回車,我們可以看到 lipo
提示我們完成,並且說明了產物是 [unoptimized + debuginfo]
,意思產物構建時沒有優化,並且產物帶上了嗎debuginfo
。我們知道 LLVM 編譯 release 包的時候會做一些優化,程式碼的位置相對於我們原始碼會有變化,那麼這和我們 debug 是有衝突的,我們希望我們打的斷點就在真實的原始碼位置,所以在 debug 產物,預設是把優化關閉了的。而且,我們原始碼和編譯產物的對映是存在 debuginfo
debuginfo
。
現在我們看到 target 資料夾如下。這個 x86_64
的產物就是我們模擬器需要的。
現在我們再回到 iOS 專案處,重新編譯,這個時候發現編譯會失敗。Xcode 說連結不到 Rust 產物。確實連結不到了,我們已經把原來的包刪了。
我們需要重新告訴 Xcode 如何連結我們的 Rust 庫。我們把舊的連結給刪除,然後新增我們新的帶debuginfo
的包所在的 debug 路徑。
好,現在我們重新執行,發現能執行成功了。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! ?