【科技友瘋狂】GDB 遠端除錯大法公開:讓你隔空抓 Bug 如有神助!⚡

關鍵字 :全端工程師修煉日記IoTGDB遠端除錯

你是不是有這種經驗?

? 程式明明在電腦上跑沒事,一丟到嵌入式裝置上就直接 crash!

? 想除錯卻只有串口、SSH,不知道怎麼下斷點、抓變數?

這時候你需要的不是奇蹟,而是——GDB 遠端除錯(Remote Debug)!

這篇文章會教你用 GDB + gdbserver,在本機除錯遠端的 Linux 裝置或開發板,讓你從容追 Bug、精準解錯!


一、什麼是 GDB 遠端除錯?

GDB 遠端除錯是一種讓你的電腦(Client)使用 GDB,去連接目標裝置(Target)上的 gdbserver,實現「本機控制,遠端執行」的除錯模式。

架構圖:

[主機 PC:GDB]   ← TCP/IP →   [開發板:gdbserver + 程式]

✅ 不用把整個開發環境搬到板子上
✅ 可以使用電腦的 GDB 環境進行單步、斷點、追蹤堆疊等操作
✅ 適合嵌入式開發、IoT 設備、ARM 系統除錯


二、環境準備

? 你需要:

  1. 一台開發主機(例如 Ubuntu 開發機)

  2. 一個目標裝置(例如 Raspberry Pi、嵌入式 Linux 板子)

  3. 交叉編譯器與 GDB

  4. 在目標裝置上安裝 gdbserver

✅ 安裝 gdbserver(在遠端板子上):

sudo apt install gdbserver

三、交叉編譯你的程式(帶除錯資訊)

在主機端使用交叉編譯器:

arm-none-eabi-gcc -g -o hello hello.c

或是針對 Linux 系統的嵌入式板子:

arm-linux-gnueabihf-gcc -g hello.c -o hello

⚠️ 一定要加入 -g,否則你在主機上無法看到原始碼對應!


四、在目標裝置上執行 gdbserver

在板子(或遠端 Linux 裝置)上:

gdbserver :1234 ./hello

這代表 gdbserver 正在監聽 1234 port,等待本機 GDB 連線。


五、在主機上啟動 GDB 並連接遠端

在主機電腦輸入:

arm-linux-gnueabihf-gdb hello

再輸入以下指令建立連線:

(gdb) target remote <遠端IP>:1234

成功連線後,就可以像本機除錯一樣操作了!


六、常用遠端除錯指令

指令 功能
break main 設斷點
continue 執行程式直到斷點
step / next 單步執行
print var 顯示變數內容
bt 查看堆疊回溯(Backtrace)
info locals 查看區域變數

這些指令都在主機端 GDB 執行,不需要在目標裝置安裝任何編譯環境!


七、GDB 遠端除錯 Tips & 實戰建議

保留原始碼與符號表在主機上,否則你會看到一堆機器碼


✅ 使用 SSH、網線或 USB 串口傳送執行檔到目標裝置
✅ 可將 GDB、gdbserver 整合進你的 Makefile 或啟動腳本中
✅ 斷線後可重新用 target remote 重連,不需重啟程式


八、進階玩法:串口除錯 + 多線程除錯

你甚至可以這樣玩:

  • 使用 USB 串口傳送 gdbserver 訊號

  • 多執行緒程式中用 info threads 掃描執行緒

  • thread <n> 切換執行緒進行逐步檢查

? 這就是專業系統開發者的日常!


結語:GDB 遠端除錯讓你真正掌控嵌入式開發現場

如果你是寫 driver、IoT 應用、或嵌入式應用程式,GDB 遠端除錯會是你最可靠的救命工具。

它讓你:

  • 掌握低層記憶體狀態

  • 無痛追蹤遠端程式錯誤

  • 一次解決無頭裝置上的 Bug 問題

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論