3--編譯和執行過程
- 1.編譯
- 2.gdb調試
- gdb 查core
GCC是一個編譯套件,是一個以"gcc"命令為首的源碼施工隊。施工隊的成員有gcc、cpp、as、ld四個成員
- 預處理–宏定義展開,頭文件引入-- cpp 等價于 gcc -E
- 編譯–C語言->匯編語言–gcc -S
- 匯編–匯編語言->機器語言–gcc -c
- 鏈接–鏈接相關的.o文件–ld
-o 指定輸出文件的名字
1.編譯
(win操縱系統,老九課堂筆記)
1.預處理–將頭文件(.h)的具體內容展開至源文件中;刪除注釋;添加行號和文件標識等;預處理完產生一個.ii文件(c語言編譯將產生一個.i文件)
cpp demo.cpp > demo.ii
cpp 為 C Preprocessor的縮寫, >表示輸出到文件
還有另外兩種命令也可以用于產生.ii 文件,其中-o參數用于指定輸出文件命
g++ -o demo.ii -E demo.cpp
g++ -o demo.ii demo.cpp
2.編譯–對.ii文件進行詞法/語法/語義分析,生成相應的匯編文件,.s文件
g++ -o demo.s -S demo.ii
3.匯編–將匯編文件轉換成二進制目標文件.o .obj結尾
as -o demo.o demo.s
g++同樣可以實現
g++ -o demo.o demo.s
4.連接–將目標文件和C++庫函數連接,將涉及到的庫代碼合并到目標代碼中;
g++ -o demo.exe demo.o
生成demo.exe可執行文件
(mac+vscode)
在vscode 終端上輸入
g++ main.cpp -o main
"/Users/chenyingying/CppProject/Helloworld/"main
即可運行,(猜測)第一條語句是不是包括了預處理,編譯,匯編,連接于一體,生成mac/linux下可執行文件main.out文件。輸入目錄運行對應的可執行文件。
2.gdb調試
GNU debugger–Richard Stallman設計的
要想通過gdb調試,必須在編譯時加上調試接口,即-g
gcc -g ./rubbish.c input.c readfile.c -o rubbish19_debug
gdb ./rubbish19_debug
GDB 的一些常用指令:
- run/r–進入調試狀態后,運行代碼
- break/b–設置斷點break 12 # 在源碼12行設置斷點
- list/l–顯示源代碼
- continue/c–繼續執行直至下一個端點或者結束
- print/p–打印變量的值
- examine/x–查看指定內存地址中的數據,(只能查看當前被調試程序能夠非法訪問的地址)
- next/n–單步執行命令。
MAC上使用gdb(完美解決)
(證書沒有添加成功,sudo應該可以跑)
gdb 查core
sudo service apport stop # 關掉某些服務ulimit -c unlimited # 啟動某些東西xxxbuild_run app1_test # 編譯運行某個文件,產生core文件 vcat /proc/sys/kernel/core_pattern # 查看core文件生成的路徑cd xxx/test # cd core 文件目錄gdb app1_test core # gdb 調試出core文件bt # 跳轉到出core的地方