LidaDbg-源碼級跨機跨架構調試

LidaDbg-源碼級跨機跨架構調試

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的源碼級調試前端操作檯:

LidaDbg-源碼級跨機跨架構調試

然後,去gitee/geekneo/LidaDbg下載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的效率。


LidaDbg-源碼級跨機跨架構調試

初次使用的時候配置略顯繁瑣,但是一旦配置好了之後,我們只需要改每次進程的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支持的平臺一樣多,很酷不是麼?

好了,這篇文章介紹的內容沒啥難度,普適性也強,關鍵是可以實實在在的提高你的開發效率,朋友們值得一試,剛把得。


分享到:


相關文章: