手把手教你使用VSCode + gdb + gdbserver調試ARM程序

2022-02-01 嵌入式大雜燴

點擊上方「嵌入式大雜燴」,選擇「置頂公眾號」第一時間查看嵌入式筆記!

嵌入式軟體開發中,最常用的調試方法就是:log列印調試法及在線調試。log列印調試法相關文章:bug解決不了?使用日誌法

開發STM32時,我們有IDE可以用,IDE中已經集成有調試器,配合仿真器使用起來很方便。而在Linux應用程式的開發中,常常直接在命令行使用gdb進行調試,或者可以使用VSCode+gdb進行調試。

gdb調試相關文章:GDB調試器原來那麼簡單

而在嵌入式Linux中,我們如何對開發板上的arm程序進行調試呢?

我們可以使用VSCode+gdb+gdbserver來調試我們arm開發板上的arm程序。下面簡單介紹一下使用方法,前提是開發板與PC可以進行無線/有線通信。相關文章:一次關於WiFi 驅動移植的總結復盤

1、準備arm格式的gdb及gdbserver工具

一般交叉編譯工具鏈裡都包含有,如果沒有則需要自己下載gdb源碼進行交叉編譯,gdb下載源碼下載連結:

http://www.gnu.org/software/gdb/download/

涉及到交叉編譯的文章:

乾貨 | protobuf-c之嵌入式平臺使用

實用 | 一個高性能通信庫的簡單使用分享

這裡我使用的是交叉編譯工具鏈裡的gdb及gdbserver,如:

2、創建launch.json文件並修改

我們需要創建vscode的launch.json文件並進行一些修改:

其中需要修改"program",這是我們需要調試的程序,即我們交叉編譯好的程序。還需要添加如下兩個鍵值對:

"miDebuggerPath:"/opt/rv1126/bin/arm-linux-gnueabihf-gdb"
"miDebuggerServerAddress":"192.168.3.12:9001"

其中,miDebuggerPath表示的是arm格式gdb的路徑;miDebuggerServerAddress表示的是我們server端的地址,如:192.168.3.12為開發板的ip,9001為埠號,可自行設置,其範圍為:0~65536,0~1023 的埠一般由系統分配給特定的服務程序。

3、把gdbserver傳到開發板上

我們需要交叉編譯器路徑下的gdbserver傳到開發板上,如我這裡放到開發板的/usr/bin路徑下:

4、啟動gdbserver

我們首先需要啟動開發板上的gdbserver,pc端才能連接進行調試,格式為:

gdbserver  開發板ip:埠號  要調試的程序

如:

5、啟動vscode的gdb進行調試

最後,啟動vscode的gdb即可進行調試。如:

以上就是本次的分享。

碼字不易,如過文章對你有幫助,麻煩幫忙三連支持,謝謝大家!

溫馨提示

由於微信公眾號近期改變了推送規則,如果您想經常看到我們的文章,可以在每次閱讀後,在頁面下方點一個「贊」或「在看」,這樣每次推送的文章才會第一時間出現在您的訂閱列表裡。

猜你喜歡:

嵌入式大雜燴文章精選

分享10道有趣的C語言面試題及答案

一次關於WiFi 驅動移植的總結復盤

乾貨 | 淺析gcc、arm-linux-gcc和arm-elf-gcc的關係

晶片短缺,如何快速上手並替換一款MCU

分享一位嵌入式前輩的高效學習法


在公眾號聊天界面回復1024,可獲取嵌入式資源;回復 m ,可查看文章匯總。

文章都看完了不點個嗎

給ZhengN加個雞腿🍗

相關焦點

  • 嵌入式Linux的GDB調試環境建立
    嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。
  • 建立ARM平臺上的交叉調試器gdb和gdbserver
    其中:host指定了運行環境為i386機器,target指定了需要調試的目標機環境(我使用的ARM toolchain是armv5-linux-uclibc-gcc,因此這樣指定,如果是用arm-linux-gcc,則 --target=arm-linux),prefix指定了編譯後的結果存放的位置,也就是安裝目錄。
  • Linux C/C++ 開發人員要熟練掌握 GDB 調試代碼塊
    一、啟動GDB調試使用 GDB 調試程序一般有三種方式: gdb filename gdb attach pid gdb filename corename1、直接調試目標程序2、附加進程3、調試 core
  • 新技巧GET: 使用gdbserver來調試Linux CMake工程
    關於GdbserverGdbserver是一個運行在Linux上的調試工具,用於調試Linux上運行的應用程式。當目標系統是一個嵌入式系統時,可能因為資源的限制而不能運行全功能版本的gdb,這個時候gdbserver就顯得格外的有用了。
  • android平臺arm指令學習和調試
    三、調試可執行程序1)Push編譯好的elf到樣機中2)使用gdbserver啟動該文件「/data/local/gdbserver:12345/data/local/helloa」3)adbforwardtcp:12345tcp:123454)啟動gdb5)Targetremote127.0.0.1
  • 番外篇 | gdb+gdbserver調試
    在之前的文章中,對gdb調試做過一期簡單的介紹番外篇|使用gdb對程序進行調試,但是之前的文章我們是在ubuntu上對應用程式進行的調試,不是在ARM板上進行的調試,相對於其他的軟體開發,嵌入式軟體的調試手段比較有限,我相信一定有很多人的調試手段依然是使用原始的列印的辦法。這一期我們就介紹一種可以在ARM板上調試應用代碼的辦法。
  • Ubuntu12.10 使用JLink連接開發板用arm-gdb調試ARM程序
    > 1.2 安裝針對arm的gdb1.2.1 到gdb官網下載源碼由於ubuntu下沒有編譯好的針對arm平臺的gdb,故可以去官網下載: http://ftp.gnu.org/gnu/gdb/ , 可以先通過gdb -v 查看系統合適的版本;$gdb -vGNU
  • 在VIM中實現對嵌入式軟體的調試
    其強大的gdb調試工具可以方便地對嵌入式平臺上的程序進行跟蹤調試;而Linux下強悍的VIM編輯器,不僅可以方便地調用make文件對代碼進行編譯,而且通過腳本的配置還可輕鬆地成為高效的代碼編輯環境。流傳著這樣一種說法,「世界上的程式設計師分三種,一種使用Emacs,一種使用VIM,剩餘的是其他。」
  • 使用gdb和gdbserver構建在線調試環境
    Jlink通過SWD或者JTAG接口直接在IDE中在線調試,Linux應用程式通常是加printf輸出log去調試,這種方式簡單,但是有些隱藏的程序bug只通過加列印信息不那麼容易定位,這時可以通過類似單片機調試的gdb調試來實現,本篇為大家介紹linux環境下在線調試環境的搭建,希望對大家有所幫助。
  • 在Linux上利用core dump和GDB調試segfault
    以前蟲蟲文章中介紹過使用strace進行系統調試和追蹤《linux動態追蹤神器——Strace實例介紹》。今天蟲蟲再給大家介紹下利用core dump文件和gdb做應用程式調試和追蹤的方法。
  • Apollo開發者說丨使用GDB調試Apollo項目
    11# 啟動方法3:在Dreamview中啟動Planning模塊,然後使用ps aux | grep planning命令查找12# planning進程ID(PID),假設為35872,則使用attach模式附加到當前planning進程調試13sudo gdb -q bazel-bin/modules/planning/
  • GDB入門教程之如何使用GDB啟動調試
    對於本地的某個二進位文件 demo ( GDB 也支持遠程調試),若其啟動時不需要命令行參數,則可以在shell下使用命令 gdb demo 進入 GDB,並輸入 run (縮寫形式 r) 啟動對demo的調試。若 demo 程序啟動時需要命令行參數,則可以在使用 gdb demo 命令進入GDB後,使用命令 run arg1 arg2...
  • gdb調試技巧
    gdb也用了好幾年了,雖然稱不上骨灰級玩家,但也有一些自己的經驗,因此分享一下,順便也作為一個存檔記錄。多進程調試最近在調試一個漏洞的exploit時遇到一個問題。目標漏洞程序是一個 CGI 程序,由主進程調起,而且運行只有一瞬的時間;我的需求是想要在在該程序中下斷點,在內存布局之後可以調試我的 shellcode,該如何實現?
  • 你還在用GDB調試程序嗎?
    你還在用GDB調試程序嗎?如果是,那麼我們是同道中人。但是你知道GDB有一個很強大的功能,Python scripting嘛?如果是的,那麼恭喜你,你是一個大牛。本文主要講述如何使用Python來提高你的GDB調試技能, 讓你從繁重的重複的工作裡面掙脫出來呼吸新鮮空氣。首先,第一件事,使用gdb7.x以上的版本,最好9.x的。因為Python的支持是從gdb7.0(2009年?)開始的。
  • Linux下C編程基礎之:gdb調試器
    本文引用地址:http://www.eepw.com.cn/article/257150.htm調試是所有程式設計師都會面臨的問題。如何提高程式設計師的調試效率,更好、更快地定位程序中的問題從而加快程序開發的進度,是大家都很關注的問題。
  • 手把手教你用VSCode調試仿真
    什麼?你不知道Windows也可以用gcc?好吧,我今天手把手教你用gcc,並且教你在vscode上用gcc徵服debug過程中遇到的各種疑難雜症!2.,你可以用命令行gdb來debug。還有下面配置的這個「miDebuggerPath」是gdb的路徑:  "version": "0.2.0",     "configurations": [        {             "name": "gcc.exe - 生成和調試活動文件
  • 手把手教你用gdb調試mongod
    作為一個後端程序,進行CRUD操作是家常便飯,但如果不看源碼,便不會知道MongoDB底層是如何實現的,對自己寫的CRUD代碼,心裡就沒譜,不確定哪一行代碼就把MongoDB給壓垮了。遇到問題,不知道為啥MongoDB支撐不住,也就無從說起該怎樣哪裡優化。開源MongoDB有上萬個文件,代碼量百萬行。
  • 原來gdb的底層調試原理這麼簡單
    相信每位嵌入式開發工程師都使用過 gdb 來調試程序,如果你說沒有用過,那只能說明你的開發經歷還不夠坎坷,還需要繼續被 BUG 吊打。我們既可以使用黑乎乎的終端窗口來調試程序;也可以使用集成開發環境(IDE),這個IDE中已經嵌入了調試器,這樣就可以單擊各種 button 來代替手動輸入調試命令了。與本地調試相比,遠程調試中多了GdbServer,它和目標程序都是運行在目標機中,可能是一臺x86電腦或者是一個ARM板子。圖中的紅線表示 GDB 與 GdbServer 之間通過網絡或者串口進行通訊。
  • 用圖文帶你徹底弄懂GDB調試原理
    相信每位嵌入式開發工程師都使用過gdb來調試程序,如果你說沒有用過,那只能說明你的開發經歷還不夠坎坷,還需要繼續被 BUG吊打。我們都知道,在使用gcc編譯時,可以使用-g選項在可執行文件中嵌入更多的調試信息,那麼具體嵌入了哪些調試信息?這些調試信息是如何與二進位的指令之間進行相互交互?
  • 在 Linux 中如何使用 gdb 調試 C 程序
    首先,為了能夠順利使用類似 GDB 這樣的調試器,你必須以指定的方式編譯程序,讓編譯器產生調試器所需的調試信息。例如,在使用 gcc 編譯器(我們將在本教程之後的章節用它來編譯 C 程序示例)編譯代碼的時候,你需要使用 -g 命令行選項。想要了解 gcc 編譯器手冊頁中關於 -g 命令行選項相關的內容,請看這裡[2]。