天天看點

嵌入式交叉編譯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):

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

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情況展示:

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

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

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

 PS:

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

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

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

之後我們點選linux系統内的vscode上的調試按鈕就可以了:

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

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

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

相關設定
如果沒有進行core dump 的相關設定,預設是不開啟的。可以通過ulimit -c檢視是否開啟。如果輸出為0,則沒有開啟,
需要執行ulimit -c unlimited開啟core dump功能。
編譯應用程式源碼時要加-g選項。      
嵌入式交叉編譯GDB,結合vscode圖形化調試C和C++代碼 coredump定位段錯誤
嵌入式交叉編譯GDB,結合vscode圖形化調試C和C++代碼 coredump定位段錯誤
嵌入式交叉編譯GDB,結合vscode圖形化調試C和C++代碼 coredump定位段錯誤

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

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

第四部分  調試CPP代碼

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

.

/************* 社會的有色眼光是:博士生、研究所學生、大學生、工廠中的房間勞工; 重點大學高材生、普通院校、二流院校、野雞大學; 年薪百萬、五十萬、五萬; 這些都隻是帽子,可以失敗千百次,但我和社會都覺得,人隻要成功一次,就能換一頂帽子,隻是社會看不見你之前的失敗的帽子。 當然,換帽子決不是最終目的,走好自己的路就行。 杭州.大話西遊 *******/

繼續閱讀