LidaDbg的設計初衷是調試release模式的源碼以及沒有源碼的二進制程序,但這個屬於高級主題,我們留著後面再寫。今天,我們要分享的是將LidaDbg作為debug模式的源碼調試器。
為啥要用LidaDbg呢?因為它輕量、方便、好用。對於我們這種很少寫Java/Kotlin程序的人來說,用Android Studio實在是太不方便了。更何況,我那2012款老掉牙的MacBookPro,運行Android Studio也是費勁得不行。所以我一般都是NDK+LidaDbg+VSCode進行Android Native的開發,這個模式不吃電腦配置,很爽不是麼?
簡單講,release模式的源碼/二進制調試採用LidaDbg+IDA,debug模式的源碼調試採用LidaDbg+VSCode,這個組合是我多年以來摸索出的絕佳組合,現在通過我的自媒體平臺分享給所有需要的朋友們。
開始之前,我們先將前置條件準備好。打開VSCode,安裝CodeLLDB插件,這個是LidaDbg的源碼級調試前端操作檯:
然後,去gitee/geekneo/LidaDbg下載LidaDbg相關文件,至此依賴的文件就算準備好了:
接下來,做好軟件配置。首先把LidaDbg的服務端push進手機並啟動:
<code>adb push lidadbg_root/Android/LidaDbgServer-arm /data/local/tmp/ adb shell chmod -R 755 /data/local/tmp/LidaDbgServer-arm/ /data/local/tmp/LidaDbgServer-arm/lidadbg-server&/<code>
然後在VSCode裡面新建CodeLLDB調試器配置,並將內容修改如下:
<code>{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "lldb", "request": "custom", "name": "Remote Attach", "initCommands": [ "platform select remote-android", "platform connect connect://localhost:30333", "platform process attach -p 25252" ] } ] }/<code>
其中要注意request一定要改成custom,以便執行我們指定的initCommands。
然後,將手機LidaDbg調試器服務端口映射到本機:
<code>adb forward tcp:30333 tcp:30333/<code>
至此,軟件環境就準備好了。接下來,我們就可以進行NDK jni項目的源碼級別調試了,注意編譯的時候要加上調試模式,否則編譯出來是release模式,如下:
<code>NDK_DEBUG=1 ndk-build/<code>
為了方便我們attach,可以在程序啟動的時候加一個等待的操作:
<code>void lidadbg_waiting() { for (int i = 0; i < 10; i++) { sleep(2); printf("%d is waiting for debugger %d/10...\n", getpid(), i + 1); fflush(stdout); } }/<code>
拿到程序的pid修改platform process attach -p pid中的pid為實際的進程id值,快捷鍵F5啟動attach,然後我們就可以愉快的在VSCode裡面源碼級調試Android jni程序了,調試體驗和用Visual Studio調試Window Native差不多,非常好用,可以大大提高我們解bug的效率。
初次使用的時候配置略顯繁瑣,但是一旦配置好了之後,我們只需要改每次進程的pid就可以了。是不是很簡單?扔掉Android Studio試試吧。
上述步驟適用於Android平臺,那麼iOS平臺如何操作呢?畢竟對於Tweak類型的研發,源碼調試的話Xcode是指望不上了。如果要用LidaDbg+VSCode源碼級調試自研的Tweak Dylib插件,上述絕大部分步驟是一樣的,唯一的區別是initCommands裡面的localhost要改成iOS設備的真實IP地址,這樣才可以正常調試。如果用usbmux等工具也做端口轉發的話,是不能正常工作的,因為iOS版本的lldb-server與debugserver無法同時工作在同一端口映射之下。具體原因我沒有去深究,因為填實際IP地址並不影響調試體驗。感興趣的朋友可以研究研究原因。
移動平臺可以這樣操作,那麼PC平臺可以嗎?答案當然是肯定的,只要你有對應平臺的lldb-server,均可以按照上述步驟配置,這樣我們跨機跨架構源碼級調試都是十分方便的。可喜的是,lldb-server幾乎與gdbserver支持的平臺一樣多,很酷不是麼?
好了,這篇文章介紹的內容沒啥難度,普適性也強,關鍵是可以實實在在的提高你的開發效率,朋友們值得一試,剛把得。