MinGW(Minamalist GNU For Windows)是個精簡的C/C++編譯器,它實際上是將經典的開源C語言編譯器GCC移植到了Windows下,並且包含了Win32API,因此可以將源代碼編譯生成Windows下的可執行程序。
一句話來概括,MinGW是GCC的Windows版本
MinGW是開源軟件,可以免費使用
MinGW由一個活躍的開源社區在持續維護,不會過時
MinGW使用Windows的C語言運行庫,編譯出的程序不需要第三方DLL,可以直接在Windows下運行。
對於初學C語言的人來說,MinGW是正合適的編譯器,至少黑色的命令提示符界面很有編程的氣氛,感覺很酷。
雖然VC6等編譯器,只要點擊鼠標就可以完成編譯,但它會自動生成一大堆工程文件,讓初學者摸不着頭腦,而MinGW則只會生成一個可執行文件。
總而言之,對於一般人來說,MinGW適合學習C語言時使用,真正工作還是VC6好用。
MinGW安裝
標准的MinGW需要連接網絡在線安裝,
MinGW默認的安裝位置是“c:\MinGW”,如果沒有特殊需求,默認即可
安裝過程中,會彈出“MinGW Installation Manager”安裝管理界面,選擇需要安裝的組件。
右鍵選擇套件,勾選Mark For Installation
左上角菜單Installation選擇Apply change就開始安裝。
修改環境變量:
選擇計算機—屬性—高級系統設置—環境變量,在系統變量中找到Path變量,編輯Path變量,在變量值的最前面添加“C:\MinGW\bin;”,這是為了防止和VC/.NET之類的makefile命令沖突。
在開始菜單中點擊“運行”,輸入cmd,打開命令行,
輸入mingw-get,如果彈出Mingw Installation Manager窗口,說明安裝正常。
然后關閉Mingw Installation Manager窗口,否則接下來的步驟會報錯
在cmd中輸入命令mingw-get install gcc,等待一會,gcc就安裝成功了,
如果想安裝g++,gdb,只要輸入命令mingw-get install g++和mingw-get install gdb
使用gdb調試程序:
在cmd當前工作目錄寫c程序1.cpp,在cmd中輸入命令,gcc 1.cpp -g,編譯選項-g告訴編譯器生成調試信息;
如果要用gdb調試,編譯時要加上-g選項,生成調試用的符號表;
第一步:編譯程序
gcc 1.cpp -g
生成可執行文件a.exe
第二步:運行gdb
gdb a.exe
這樣,gdb在運行時會自動裝入剛才生成的可執行程序。
第三步:查看源碼
<gdb>l
#include <stdio.h> void swap(int a,int b) { int t=a;a=b;b=t; } int main() { int a=3,b=4; swap(3,4); printf("%d %d\n",a,b); return 0; }
這里<gdb>是gdb的提示符,字母l是輸入的命令,它是list(列出程序清單)的縮寫。
如果用l 15,將會顯示第15行(以及它前后的若干行)。所有這些操作,都可以用help list命令來查看;
第四步:加斷點並運行
<gdb> b 5
Breakpoint 1 at 0x4016b6:file 1.cpp,line 5.
<gdb> r
Starting Program:D:\\\\4-4\4-4/a.exe
breakpoint 1,swap(a=3,b=4) at 1.cpp;5
其中b命令把斷點設在了第5行,r命令運行程序,之后碰到斷點並停止。
運行程序的命令是r(run),但會一直執行到程序結束
可以用b(break)命令設置斷點讓它停下來
第五步:查看調用棧
<gdb> bt
這一步是關鍵。根據bt命令,調用棧中包含兩個棧幀:#0和#1,其中0號是當前棧幀--swap函數,1號是它的“上一個”棧幀--main函數。在這里我們甚至能看到swap函數的返回地址
<gdb> p a
使用p命令可以打印變量值
up命令選擇上一棧幀
q命令退出gdb
bt相關命令可以通過help stack來學習
MinGW中沒有gdb.exe解決辦法
配置好MinGW路徑后,打開命令提示符,輸入 mingw-get install gdb
https://code.visualstudio.com/docs/cpp/config-mingw
https://www.zhihu.com/question/333233461
轉: https://fengliurenwu.blog.csdn.net/article/details/110085502
https://blog.csdn.net/qq_37804582/article/details/104832999
https://blog.csdn.net/bat67/article/details/76095813