嵌入式交叉編譯GDB,結合vscode圖形化調試C和C++代碼 coredump定位段錯誤


 

第一部分:交叉編譯GDB

GDB源碼下載路徑:
http://ftp.gnu.org/gnu/gdb/


遇到的主要難點:

選擇合適的GDB源碼版本
我的mips-linux交叉編譯器不支持C++11特性,所以我選擇較老的GDB版本
//是不是不太明白我在說啥?自己去試錯就知道了。我之前選擇了GDB9.1版本,編譯途中遇到報該錯。
//之后又下載了一個GDB版本來編譯,make的時候有其他錯誤,我無法解決。
最終,我選擇的合適版本是 gdb-7.12.1.tar.xz,建議讀者也下載該版本。
//版本老點不要緊,夠用就行。貪多嚼不爛。

  

編譯前基本知識科普:

--prefix指定安裝路徑 
后面的路徑一般是我們自己新創建的用來存放目標程序(現在我們的目標程序就是GDB)的文件夾

--target --host 一般一樣,指定為交叉編譯器的前綴
(我當前mips平台的交叉編譯器是mips-linux-gnu-gcc,所以這里后面寫mips-linux-gnu)

CC指定交叉編譯器

  

之后進行編譯安裝,參考的文檔是:

正點原子的<< I.MX6U嵌入式Linux驅動開發指南V1.5.pdf>>第B3章節,

后續操作步驟只有幾步,很簡單。可轉去參考該文檔,不參考也可以,本博客也會詳解步驟。

我的GDB源碼,默認解壓后得到的文件夾是gdb-7.12.1,cd進入該文件夾,就是進入了源碼根目錄。

1.1 在源碼根目錄下,執行交叉編譯GDB並安裝:

./configure --target=mips-linux-gnu --prefix=/home/lmw/open_lib/GDB/GDBStupHere
make 
make install

留心點(point):

 

1.2 進入源碼根目錄內的gdb/gdbserver子文件夾,執行交叉編譯GDBServer:

./configure --target=mips-linux-gnu --host=mips-linux-gnu CC=mips-linux-gnu-gcc
make

  

其他備注:

0. 必須先保證開發板和ubuntu主機能ping通,我們在ubuntu主機內進行代碼編寫,

所以我的應用程序源碼在ubuntu主機內。


1.

編譯應用程序時要加[-g]選項,否則,GDB調試時會報錯。

2.

在我的linux板子上,執行:
gdbserver 192.168.1.23:2001 main_app
//192.168.1.23是主機ubuntu的IP,2001是端口號,可以隨便寫, main_app是目標可執行程序

開啟ubuntu終端,在待調試的應用程序源碼文件夾內去啟動GDB,執行:
mips-linux-gnu-gdb main_app

連接到開發板上,執行:
target remote 192.168.1.20:2001
//192.168.1.20是開發板的IP

之后ubuntu主機與開發板即可連接成功,可以使用GDB命令進行調試了。

  

 我的ubuntu情況展示:

 

 第二部分: 結合vscode進行圖形化調試

 PS:

 

下圖是圖形化調試前需要在嵌入式板子上敲的命令:

之后我們點擊linux系統內的vscode上的調試按鈕就可以了:

 

第三部分:  段錯誤解決神器之coredump使用

 

Core Dump
當程序運行的過程中異常終止或崩潰,操作系統會將程序當時的內存狀態記錄下來,保存在一個文件中,這種行為就叫做Core Dump(中文有的翻譯成“核心轉儲”)。
我們可以認為 core dump 是“內存快照”,但實際上,除了內存信息之外,還有些關鍵的程序運行狀態也會同時 dump 下來,
例如寄存器信息(包括程序指針、棧指針等)、內存管理信息、其他處理器和操作系統狀態和信息。
core dump 對於編程人員診斷和調試程序是非常有幫助的,因為對於有些程序錯誤是很難重現的,例如指針異常,而 core dump 文件可以再現程序出錯時的情景。

相關設置
如果沒有進行core dump 的相關設置,默認是不開啟的。可以通過ulimit -c查看是否開啟。如果輸出為0,則沒有開啟,
需要執行ulimit -c unlimited開啟core dump功能。 編譯應用程序源碼時要加-g選項。

 

 

 PS:需要注意,要通過menuconfig配置內核,使能core功能:

 

第四部分  調試CPP代碼

 

 

 

 

 

 

.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM