C++(2)--mac使用VScode 進行C++編譯、運行、調試

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四個成員

  1. 預處理–宏定義展開,頭文件引入-- cpp 等價于 gcc -E
  2. 編譯–C語言->匯編語言–gcc -S
  3. 匯編–匯編語言->機器語言–gcc -c
  4. 鏈接–鏈接相關的.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 的一些常用指令:

  1. run/r–進入調試狀態后,運行代碼
  2. break/b–設置斷點break 12 # 在源碼12行設置斷點
  3. list/l–顯示源代碼
  4. continue/c–繼續執行直至下一個端點或者結束
  5. print/p–打印變量的值
  6. examine/x–查看指定內存地址中的數據,(只能查看當前被調試程序能夠非法訪問的地址)
  7. 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

boost庫linux編譯安裝

0.下載 1.解壓boost_1_49_0.tar.g然后放到/opt/ 2. 進入解壓后的文件夾 cd /opt/boost_1_49_0 3.將boost安裝配置在/boost/prefix目錄下 不過之前先 mkdir -p /boost/prefix

leetcode136 只出現一次的數字

給定一個非空整數數組&#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。 說明&#xff1a; 你的算法應該具有線性時間復雜度。 你可以不使用額外空間來實現嗎&#xff1f; 示例 1: 輸入: [2,2,1] 輸出: 1 示例 2: …

C++(3)--編譯、gdb調試

3--編譯和執行過程1.編譯2.gdb調試gdb 查coreGCC是一個編譯套件&#xff0c;是一個以"gcc"命令為首的源碼施工隊。施工隊的成員有gcc、cpp、as、ld四個成員 預處理–宏定義展開&#xff0c;頭文件引入-- cpp 等價于 gcc -E編譯–C語言->匯編語言–gcc -S匯編–匯…

leetcode94 二叉樹的中序遍歷

給定一個二叉樹&#xff0c;返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 遞歸 /*** Definition for a binary tree node.* public class TreeNode …

使用動態鏈接庫

1. 動態鏈接庫是程序運行時加載的庫,當動態鏈接庫正確安裝后,所有的程序都可以使用動態庫來運行程序。動態鏈接庫是目標文件的集合,目標文件在動態鏈接庫中的組織方式是按照特殊方式形成的。庫中函數和變量的地址是相對地址,不是絕對地址,其真實地址在調用動態庫的程序加載…

算法(29)--兩棵樹匹配

樹匹配1.劍指 Offer 26. 樹的子結構2.劍指 Offer 27. 二叉樹的鏡像3.劍指 Offer 28. 對稱的二叉樹1.劍指 Offer 26. 樹的子結構 判斷&#xff1a;小樹B是否是大樹A的一部分&#xff0c;需要以大樹A的每個為根節點進行匹配判斷。 算法&#xff1a;判斷兩個節點是否相等&#xf…

leetcode647 回文子串

給定一個字符串&#xff0c;你的任務是計算這個字符串中有多少個回文子串。 具有不同開始位置或結束位置的子串&#xff0c;即使是由相同的字符組成&#xff0c;也會被計為是不同的子串。 示例 1: 輸入: "abc" 輸出: 3 解釋: 三個回文子串: "a", "…

windows下關于Objective-C開發環境的配置

最近IOS一直很火&#xff0c;也想學習以以下OC開發&#xff0c;一般裝個虛擬機&#xff0c;然后裝個mac&#xff0c;我相信大多數人的機子跑不起來或者很卡&#xff0c;所以之前借鑒了一個文章&#xff0c;就是關于在windows下配置OC開發環境&#xff0c;這里我把自己的安裝說一…

如何選擇商鋪投資

如何選擇商鋪&#xff1f; 選擇商鋪時&#xff0c;需要考慮哪些因素呢&#xff1f; 聶先生表示&#xff0c;要看地段&#xff0c;包括周圍的商業環境、停車方便程度、汽車流量、未來發展前景、視覺效果等因素。此外&#xff0c;地域經濟也很重要&#xff0c;必須要有一個好的投…

PaperNotes(6)-GAN/DCGAN/WGAN/WGAN-GP/WGAN-SN-網絡結構/實驗效果

GAN模型網絡結構實驗效果演化1.GAN1.1網絡結構1.2實驗結果2.DCGAN2.1網絡結構2.2實驗結果3.WGAN3.1網絡結構3.2實驗結果4.WGAN-GP4.1網絡結構4.2實驗結果5.WGAN-SN5.1網絡結構5.2實驗結果小結1.GAN 文章&#xff1a; https://arxiv.org/pdf/1406.2661.pdf 代碼&#xff1a; Py…

Spring Security使用

Spring Security 在web應用開發中&#xff0c;安全無疑是十分重要的&#xff0c;選擇Spring Security來保護web應用是一個非常好的選擇。 Spring Security 是spring項目之中的一個安全模塊&#xff0c;可以非常方便與spring項目無縫集成。特別是在spring boot項目中加入sprin…

nginx python webpy 配置安裝

安裝webpy$ wget http://webpy.org/static/web.py-0.34.tar.gz$ tar xvzf web.py-0.34.tar.gz$ cd web.py-0.34$ sudo python setup.py install安裝 Fluphttp://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz$ wget http://www.saddi.com/software/flup/dist/flup-1.0.2…

PaperNotes(7)-GANs模式坍塌/訓練不穩定

GANs-模式坍塌-訓練不穩定1.訓練不穩定問題相關文章1.1 DCGAN1.2Big-GAN1.3WGAN 、WGAN-GP、SN-WGAN1.4其他工作2.模式坍塌問題相關文章2.1 MAD-GAN2.2 Unrolled GAN2.3 DRAGAN2.4 D2GAN2.5 InfoGAN2.6 Deligan2.7 EBGAN2.8 Maximum Entropy Generators for Energy-Based Model…

thinkphp框架起步認識

先看看thinkphp的文檔吧&#xff1a;這是我在網上找的一個不錯的鏈接地址&#xff0c;對自己有用&#xff0c;同時相信對讀者也有用吧。 http://doc.thinkphp.cn/manual/class.html ThinkPHP 跨模塊調用操作方法&#xff08;A方法與R方法&#xff09; 跨模塊調用操作方法 前面說…

leetcode403 青蛙過河

一只青蛙想要過河。 假定河流被等分為 x 個單元格&#xff0c;并且在每一個單元格內都有可能放有一石子&#xff08;也有可能沒有&#xff09;。 青蛙可以跳上石頭&#xff0c;但是不可以跳入水中。 給定石子的位置列表&#xff08;用單元格序號升序表示&#xff09;&#xff…

PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm

通用貝葉斯推理算法-Stein Variational Gradient DescentAbstract1 Introduction2 Background3 Variational Inference Using Smooth Transforms3.1 Stein Operator as the Derivative of KL Divergence定理3.1引理3.23.2 Stein Variational Gradient Descent4 Related Works5 …

thinkphp的增刪改查

ThinkPHP 添加數據 add 方法 ThinkPHP 內置的 add 方法用于向數據表添加數據&#xff0c;相當于 SQL 中的 INSERT INTO 行為。ThinkPHP Insert 添加數據添加數據 add 方法是 CURD&#xff08;Create,Update,Read,Delete / 創建,修改,讀取,刪除&#xff09;中的 Create 的實現&a…

leetcode115 不同的子序列

給定一個字符串 S 和一個字符串 T&#xff0c;計算在 S 的子序列中 T 出現的個數。 一個字符串的一個子序列是指&#xff0c;通過刪除一些&#xff08;也可以不刪除&#xff09;字符且不干擾剩余字符相對位置所組成的新字符串。&#xff08;例如&#xff0c;"ACE" 是…

ThinkPHP 模板循環輸出 Volist 標簽

volist 標簽用于在模板中循環輸出數據集或者多維數組。volist 標簽在模塊操作中&#xff0c;select() 方法返回的是一個二維數組&#xff0c;可以用 volist 直接輸出&#xff1a;<volist name"list" id"vo"> 用 戶 名&#xff1a;{$vo[username]}&l…

MachineLearning(9)-最大似然、最小KL散度、交叉熵損失函數三者的關系

最大似然-最小KL散度-最小化交叉熵損失-三者的關系問題緣起&#xff1a;給定一組數據(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到這組數據服從的分布。此種情況下&#xff0c;分布規律用概率密度p(x)表征。 問題歸處&#xff1a;如果能夠建模/近似建模p(x)&#…