1. 程式人生 > >Codeblocks 除錯 MinGW GDB STL (檢視容器資料)配置教程(完整版)

Codeblocks 除錯 MinGW GDB STL (檢視容器資料)配置教程(完整版)

一、資源下載

二、配置教程

  • H:\CodeBlocks\MinGW (這是我檔案的目錄,以下會以此為基礎講解,你自己的目錄就對號入座,推薦預設路徑)。
  • 套餐推薦:python-2.7.5 + gdb-7.2.5 + mingw-static-4.4.5-all。
  • 測試的時候,推薦使用 map+結構體巢狀於map+陣列巢狀於結構體 ,試試這種複雜的,vector 無需測試,本來就支援的。
  1. 備份 MinGW 資料夾,以免操作有誤,還可以恢復。
  2. 將下載好的檔案(gdb-7.2)解壓到 H:\CodeBlocks\MinGW\bin 目錄下,覆蓋原有的檔案,如圖3、4。

  3. 分別為 gdb.exe、python.exe 配置環境變數,如圖6(gdb 環境變數配置),python 在安裝的時候自動配置環境變數,如果沒有,則百度一下,你就知道。


  4. 配置環境變數目的是為了方便使用CMD,如圖8,紅框兩個命令輸入完彈出以下資訊則成功了一半了。
    Ps:如果輸入“gdb”報錯,“
    ImportError: No module named _gdb”很可能是因為 python 版本衝突問題,這裡就需要用到我們上面下載的資源3(gdb-7.5.1(syscalls+python))將裡面的兩個資料夾覆蓋到 H:\CodeBlocks\MinGW\share\gdb。

  5. 分別執行命令以下,如圖10:
    source H:\CodeBlocks\MinGW\bin\stl.gdb
    source H:\CodeBlocks\MinGW\bin\wx.gdb
    Ps:有些 blog 這裡直接寫 source stl.gdb,source wx.gdb。我自己一開始試了下,但輸出“No such file or directory.”所以就想到可能是相對路徑或者絕對路徑的問題,所以如果不行的話,直接按照上面所說的絕對路徑寫死即可。

  6. 接著,在 C::B 裡配置 Debuggering Settings,紅框,裡輸入剛剛的命令,如圖12。
    Ps:這裡需要看下你 C::B 版本,我這裡是 16.01 版,有些 13.0+ 版可能介面稍微有些不一樣。

  7. 最終記得重啟軟體(或者保險點重啟下電腦,畢竟配置了那麼多),開啟 C::B ,如圖14效果圖。

三、注意事項

  • 不能除錯的原因有可能是建立的工程路徑為中文名或者路徑中有空格。
  • 如果變數沒有自動顯示,自己可以手動輸入變數名。
  • 如果還是沒有顯示容器資料,可能跟 C::B 版本有關,如圖,把紅勾取消掉,重啟軟體,再命令重新輸入,再開啟 C::B 看看。
    Ps:當然這個方法沒有驗證過,是否這裡出問題,我當時也很鬱悶,一直不行,但是就把這裡去掉之後就可以了,哪怕後來勾上了還是可以。

  • 有些blog說需要配置自動啟動命令檔案,但是我發現我這個版本不需要配置,很開心,如果你的版本需要每次都輸入命令才有效的話,則看下面【文獻參考】裡的文章會提到如何配置自動啟動命令。
  • 如果出現一些奇怪的現象:除錯時,黃色小箭頭不見了(除錯依然進行);for(...) 迴圈中 i、j 變數檢視不了;則很有可能是 gdb 出問題,比如一些版本之間的相容問題。
  • 當然在以上操作測試中,很有可能會搞不好了,導致整個 gdb 需要重新安裝,所以最好先備份一份原先的。當然,如果需要徹底重新純淨安裝,注意:不僅需要解除安裝該程式(或刪除當前的安裝的資料夾),很重要一點,還要刪除在Codeblocks的配置檔案(手動刪除),具體位置(若找不到該資料夾,需要開啟隱藏的檔案/資料夾選項):C:\Users\"你的使用者名稱"\AppData\Roaming\Codeblocks,手動刪除後再重新安裝即可。

四、補充 Codeblocks BUG

  • 版本 13.12~16.01,自帶 bug ,debug 時,watches 視窗不開沒事,開了的話卡頓。特別是有陣列開得很大的情況下,比如:string[](特別是在 main( ) 函式裡的時候,雖然有些版本除錯依然正常,但是不能檢視變數string[],一旦檢視就報錯,比如版本12.11), 因為變數監視引起的,所以推薦放在 main函式外面(作為全域性變數),否則 debug 單步除錯速度會受到影響。當然最新版本(17.12)推薦使用該版本,稍微會相容一點。但是17.12發現一些提示的bug,比如:string,所以本人自己最終還是退回到16.01版本。

五、文獻參考