第一部分:交叉編譯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代碼

.
