2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C++(2)--mac使用VScode 进行C++编译 运行 调试

C++(2)--mac使用VScode 进行C++编译 运行 调试

时间:2022-10-19 18:34:43

相关推荐

C++(2)--mac使用VScode 进行C++编译 运行 调试

mac 使用VScode 进行C++开发

1.编译的基础概念2. mac 编译c++代码2.1 查看编译器情况2.2 安装插件C/C++,C/C++ Clang Command Adapte2.3新建一个C++ project2.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 配置文件编译运行调试

参考博文(对配置文件的介绍比较详细):/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 文件内容

参考博文:/p/103308900?from_voters_page=true复制以下的两个文件内容

参考博文:/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的地方

参考博文:/p/106935263?utm_source=wechat_session

参考博文:

Mac下使用VScode进行C/C++开发:/lianshuiwuyi/p/8094388.html

vscode的逻辑是你可以创造很多工作区,每个工作区可以有不同的配置。每个工作区下当然要有项目文件夹,

参考博文:/p/106935263?utm_source=wechat_session

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。