赞
踩
C++程序可运行: 编辑器 编写C++源代码 -> 编译器 编译源代码 生成 可执行文件。在Mac上 可使用 VsCode 编辑C++源码,使用g++/clang++ 编译源码。 (不同操作系统[Mac, Windows, Ubuntu],C++编译流程都是一致的,只是支持流程的编译工具不同。)
编译器:
编译流程包括:预处理 - 编译 - 汇编 - 链接
gcc编译套件: 一个以"gcc"命令为首的源码施工队,施工队有四个成员:gcc、cpp、as、ld, 支持了四个操作流程
// 1. 预处理 (.cpp -> .ii) // a. 将宏定义展开,将头文件(.h)内容展开至源文件中; // b. 删除注释;添加行号和文件标识等; // c. 预处理完产生一个.ii文件(c语言编译将产生一个.i文件) // d. cpp为C Preprocessor的缩写,> 表示输出到文件 // e. cpp 等价于 (TODO), 还有一个g++的家伙 cpp demo.cpp > demo.ii // f. 另外两个用于产生.ii文件命令, 其中-o参数用于指定输出文件命 g++ -o demo.ii -E demo.cpp g++ -o demo.ii demo.cpp // 2. 编译 (.ii -> .s) // 对.ii文件进行词法/语法/语义分析,生成相应的汇编文件(.s文件) g++ -o demo.s -S demo.ii // 3. 汇编 (.s -> .o/.obj) // 将汇编文件转换成二进制目标文件.o .obj结尾 as -o demo.o demo.s g++ -o demo.o demo.s // g++同样可以实现 // 4.连接 (.o -> .exe) // 将目标文件和C++库函数连接,将涉及到的库代码合并到目标代码中 // 生成demo.exe可执行文件 g++ -o demo.exe demo.o // gcc 版本的命令 // 1. 预处理:gcc -E,展开宏,头文件 // 2. 编译: gcc -S,C语言->汇编语言 // 3. 汇编: gcc -c,汇编语言->机器语言 // 4. 链接: ld ,链接相关的.o文件--
回忆 hello world的执行过程:mac+vscode, 在终端上输入
g++ main.cpp -o main
"/Users/chenyingying/CppProject/Helloworld/"main
// 即可运行,(猜测)第一条语句是不是包括了预处理,编译,汇编,连接于一体,生成mac/linux下可执行文件main.out文件。输入目录运行对应的可执行文件。
// 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
VSCode插件: 安装C/C++、C/C++ Clang Command Adapte两款插件,以获得C++语法高亮、错误检查和调试等功能。
本地新建文件夹,在VScode中打开该文件夹 -> 新建文件New file -> 编写hello word代码,文件保存为main.cpp -> 代码编译,运行,调试
step1. 新建文件夹
step2. 添加一个新文件
step3. 在文件中编辑 hello word内容,右键文件名保存文件为main.cpp文件(文件名可以自定义xxx.cpp)
#include <iostream>
using namespace std;
int main(){
cout << "hello world" << endl;
return 0;
}
step4. 代码编译,运行,调试(无法断点调试TODO)
(base) chenyingying@chenyingyingdeMacBook-Air DebugTest % g++ main.cpp -o main
(base) chenyingying@chenyingyingdeMacBook-Air DebugTest % /Users/chenyingying/CppProject/DebugTest/main
hello world1
1.右键文件名,点击“RunCode”即可编译运行文件,很方便;但无法Debug。
运行文件后在“OUTPUT”中输出相应的内容
参考博文(对配置文件的介绍比较详细):https://www.jianshu.com/p/7c6599f21052
在使用vscode进行c++调试最重要的是需要launch.json文件(负责调试程序)。但是经常也需要tasks.json文件(负责编译程序).
step1: 编译调试文件生成
step2: 修改文件内容
参考博文: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 } } ] }
step3:编译运行,按“⇧⌘B”编译,编译成功将生成可执行文件a.out 和main 小黑框
双击main 小黑框,运行结果展示在界面上。
step4: 调试 在需要调试的文件(避免报文件找不到错误)底下执行调试操作(一下两个图都能开启调试)
在teminal中能看到程序输出的信息,左边的watch栏可以查看变量的情况。
完成第3步的设置,正常就可以设置断点调试,设置断点。“Fn+f5”开启调试,但是可能在调试窗口中显示:
Warning: Debuggee TargetArchitecture not detected, assuming x86_64.
出现这个warming的原因:因为Catalina不再支持lldb调试。
解决:安装插件CodeLLDB(用来debug,解决Catalina不支持lldb调试问题)
GNU debugger–Richard Stallman设计的。要想通过gdb调试,必须在编译时加上调试接口,即-g
gcc -g ./rubbish.c input.c readfile.c -o rubbish19_debug
gdb ./rubbish19_debug
gdb 的一些常用指令:
MAC上使用gdb(完美解决)(证书没有添加成功,sudo应该可以跑)
sudo service apport stop # 关掉某些服务
ulimit -c unlimited # 启动某些东西
xxxbuild_run app1_test # 编译运行某个文件,产生core文件 v
cat /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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。