mac 使用VScode 進行C++開發
- 1.編譯的基礎概念
- 2. mac 編譯c++代碼
- 2.1 查看編譯器情況
- 2.2 安裝插件C/C++,C/C++ Clang Command Adapte
- 2.3新建一個C++ project
- 2.3.1本地新建文件夾
- 2.3.2新建mian.cpp文件
- 2.3.3 編寫hello word demo
- 2.4 代碼編譯,運行,調試
- 2.4.1 命令行編譯運行
- 2.4.2 runcode 插件編譯運行
- 2.4.3 配置文件編譯運行調試
- 2.4.3.1編譯調試文件生成
- 2.4.3.2 文件內容
- 2.4.3.3 編譯運行
- 2.4.4.4 調試
- 2.5 Warning: Debuggee TargetArchitecture not detected, assuming x86_64
- 3.gdb調試
- gdb 查core
1.編譯的基礎概念
要運行C++程序,需要 代碼編輯器 來編寫C++源代碼,需要 編譯器 來編譯源代碼生成可執行文件。
C++的編譯流程包括:預處理-編譯-匯編-鏈接。
在不同的操作系統下(mac ,windows, Ubuntu),C++的編譯流程都是一致的,只是支持流程的編譯工具不同。
在mac 環境下,可使用Vscode來編輯C++源代碼,使用g++/clang++來編譯源代碼。
g++ 是 GNU 親兒子,Ubuntu 等常用發行版標配。
clang++ 是后起之秀,配合 llvm,以優秀的前端聞名于世,現在已經是 Mac(XCode) 的默認編譯器。
GCC是一個編譯套件,是一個以"gcc"命令為首的源碼施工隊。施工隊的成員有gcc、cpp、as、ld四個成員
- 預處理–宏定義展開,頭文件引入-- cpp 等價于 gcc -E
- 編譯–C語言->匯編語言–gcc -S
- 匯編–匯編語言->機器語言–gcc -c
- 鏈接–鏈接相關的.o文件–ld
-o 指定輸出文件的名字
(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. mac 編譯c++代碼
2.1 查看編譯器情況
g++ --version
clang++ --version
輸出
(base) chenyingying@chenyingyingdeMacBook-Air ~ % g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
(base) chenyingying@chenyingyingdeMacBook-Air ~ % clang++ --version
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
(base) chenyingying@chenyingyingdeMacBook-Air ~ %
(默認安裝?沒說沒裝怎么辦呀)
2.2 安裝插件C/C++,C/C++ Clang Command Adapte
到VSCode去安裝C/C++,C/C++ Clang Command Adapte兩款插件,以獲得C++語法高亮、錯誤檢查和調試等功能。
2.3新建一個C++ project
2.3.1本地新建文件夾
2.3.2新建mian.cpp文件
1.在VScode中打開該文件夾
2.添加一個新的文件
3.在文件中編輯內容后,右鍵文件名保存文件為main.cpp文件(文件名可以自定義xxx.cpp)
2.3.3 編寫hello word demo
#include <iostream>
using namespace std;
int main(){cout << "hello world" << endl;return 0;
}
2.4 代碼編譯,運行,調試
2.4.1 命令行編譯運行
(base) chenyingying@chenyingyingdeMacBook-Air DebugTest % g++ main.cpp -o main
(base) chenyingying@chenyingyingdeMacBook-Air DebugTest % /Users/chenyingying/CppProject/DebugTest/main
hello world1
(無法斷點調試)
2.4.2 runcode 插件編譯運行
1.右鍵文件名,點擊“RunCode”即可編譯運行文件,很方便;但無法Debug。
運行文件后在“OUTPUT”中輸出相應的內容
2.4.3 配置文件編譯運行調試
參考博文(對配置文件的介紹比較詳細):https://www.jianshu.com/p/7c6599f21052
在使用vscode進行c++調試最重要的是需要launch.json文件(負責調試程序),但是經常也需要tasks.json文件(負責編譯程序).
2.4.3.1編譯調試文件生成
way1.按鈕生成:
此時VSCode會在你的工程目錄下自動新建一個.vscode的文件夾,并新建了launch.json和task.json的文件.
way2:,命令引導
task.json–(shift+command+p -> Tasks:Configure Tasks, -> Create tasks.json form templates -> Others )
launch.json–(shift+command-> Debug->c++(GDB/LLDB))
2.4.3.2 文件內容
參考博文:https://zhuanlan.zhihu.com/p/103308900?from_voters_page=true復制以下的兩個文件內容
參考博文:https://www.jianshu.com/p/7c6599f21052 文件參數含義介紹的比較清晰
launch.json
{"version": "0.2.0","configurations": [{"type": "lldb","request": "launch","name": "Debug",//"program": "${workspaceFolder}/test.out",//上一行是官方寫法,但是不同的cpp調試都要改配置,非常麻煩"program": "${workspaceFolder}/${fileBasenameNoExtension}","args": [],"cwd": "${workspaceFolder}","preLaunchTask": "Build with Clang"}]
}
task.json
{"version": "2.0.0","tasks": [{"label": "Build with Clang",//這個任務的名字在launch.json最后一項配置"type": "shell","command": "clang++","args": ["-std=c++17","-stdlib=libc++",//"test.cpp",這里是官方寫法,不具有普遍性,注意兩個配置文件的統一性即可"${fileBasenameNoExtension}.cpp","-o",//"test.out","${fileBasenameNoExtension}","--debug"],"group": {"kind": "build","isDefault": true}}]
}
2.4.3.3 編譯運行
按“??B”編譯,編譯成功將生成可執行文件a.out 和main 小黑框
雙擊main 小黑框,運行結果展示在界面上。
2.4.4.4 調試
在需要調試的文件(避免報文件找不到錯誤)底下執行調試操作(一下兩個圖都能開啟調試)
在teminal中能看到程序輸出的信息,左邊的watch欄可以查看變量的情況。
2.5 Warning: Debuggee TargetArchitecture not detected, assuming x86_64
完成第3步的設置,正常就可以設置斷點調試,設置斷點。“Fn+f5”開啟調試,但是可能在調試窗口中顯示:
Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
出現這個warming的原因:因為Catalina不再支持lldb調試。
解決:安裝插件CodeLLDB(用來debug,解決Catalina不支持lldb調試問題)
3.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的地方
參考博文:https://zhuanlan.zhihu.com/p/106935263?utm_source=wechat_session
參考博文:
Mac下使用VScode進行C/C++開發:https://www.cnblogs.com/lianshuiwuyi/p/8094388.html
vscode的邏輯是你可以創造很多工作區,每個工作區可以有不同的配置。每個工作區下當然要有項目文件夾,
參考博文:https://zhuanlan.zhihu.com/p/106935263?utm_source=wechat_session