摘自《Linux程序設計》第四版,人民郵電出版社函數
c語言程序的編譯與調試
<<使用gcc編譯,gdb調試>>
程序編譯過程:
詞法分析-->語法分析-->中間代碼生成-->代碼優化-->目標代碼生成
gcc編譯器:
預處理(preprocessing)-->編譯(compilation)-->彙編(assembly)-->鏈接(link)
文件後綴名說明:
.c:c語言代碼
.a:由目標文件構成的庫文件
.C,.cc,.cpp:C++代碼
.h:程序所包含的頭文件
.i:已經預處理過c源文件,通常爲中間代碼文件
.ii:通過預處理過的C++源文件
.o:編譯後的目標文件,源文件生成的中間目標文件
.s:彙編語言的源代碼
.S:通過與編譯彙編源代碼
.O:編譯之後的程序目標文件,目標文件通過鏈接成的執行文件
gcc:編譯程序
-o:指定編譯輸出文件(默認輸出到當前文件夾a.out)
gcc a.c -o test.out
-v:查看程序編譯過程和顯示已經調用的庫
gcc -v a.c
-x:指定編譯語言(用在編譯器不能識別的擴展名)
gcc -x 'c' a.u
-asci:指定編譯程序使用ansic標準
-E:只進行完預編譯(.cxx)
-S:只進行到生成彙編文件(.s)
-c:只生成目錄代碼,不生成可執行程序(.o)
-g:使用gdb調試程序,配合-o輸出xxx.debug文件
編譯過程控制:
-E -S -c
源文件--->預處理文件--->彙編文件--->目標文件--->可執行文件
gdb:調試程序
gdb:啓動調試環境
file xxx.debug:加載調試文件
list n:從n開始顯示十行
break n:在n行添加斷點
info breakpoint [n]:查看程序中設置的斷點/查看n個斷點
next:程序運行到下一行停下
continue:程序會運行到下一個斷點停下
step:一行一行運行(同next),只是step能夠到調用函數內部
print:輸出變量當前值
delete n:刪除n個斷點
q:退出環境
優化