C++(2)-Mac + VScode + C++编译、运行、调试 + hello world

1. g++ 与 编译、hello world

C++程序可运行:
编辑器编写C++源代码: VsCode编辑C++源码
编译器编译源代码生成可执行文件:使用g++/clang++ 编译源码。

不同操作系统[Mac, Windows, Ubuntu],C++编译流程都是一致的,只是支持流程的编译工具不同。不同编译器:

  1. g++ 是GNU 亲儿子,Ubuntu等常用发行版标配。
  2. clang++ 是后起之秀,配合llvm,以优秀前端闻名于世,现在已经是 Mac(XCode) 默认编译器。

编译流程包括:预处理 - 编译 - 汇编 - 链接
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文件--     

mac + vscode 实现helloworld的执行过程

// main.cpp
#include <iostream>
int main()
{	
	std::cout<<"hello world 2" << std::endl;
	return 0;	
}
// main.cpp

// 终端执行
// 单条语句完成了预处理,编译,汇编,连接于一体,生成mac/linux下可执行文件main.out文件。输入目录运行对应的可执行文件。
g++ main.cpp -o main
"/Users/chenyingying/CppProject/Helloworld/"main
hello world 2

2. Mac 编译环境配置

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)
#include <iostream>
int main()
{	
	std::cout<<"hello world 2" << std::endl;
	return 0;	
}Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

2.2 安装插件C/C++,C/C++ Clang Command Adapte

VSCode插件: 安装C/C++、C/C++ Clang Command Adapte两款插件,以获得C++语法高亮、错误检查和调试等功能。
在这里插入图片描述

2.3 Demo - hello world

本地新建文件夹,在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

在这里插入图片描述

2.4 runcode 插件编译运行

在这里插入图片描述
1.右键文件名,点击“RunCode”即可编译运行文件,很方便;但无法Debug。
在这里插入图片描述
运行文件后在“OUTPUT”中输出相应的内容
在这里插入图片描述

2.5 修改配置文件->编译运行调试

参考博文(对配置文件的介绍比较详细):https://www.jianshu.com/p/7c6599f21052

在使用vscode进行c++调试最重要的是需要launch.json文件(负责调试程序)。但是经常也需要tasks.json文件(负责编译程序).

step1: 编译调试文件生成

  1. way1–按钮生成
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    此时VSCode会在你的工程目录下自动新建一个.vscode的文件夹,并新建了launch.json和task.json的文件.
    在这里插入图片描述
    在这里插入图片描述
  2. way2: 命令引导
    task.json–(shift+command+p -> Tasks:Configure Tasks, -> Create tasks.json form templates -> Others )
    launch.json–(shift+command-> Debug->c++(GDB/LLDB))

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栏可以查看变量的情况。

2.6 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文件 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

### 回答1: 许多软件都可以用来编写和运行C语言代码。以下是一些常见的选项: 1. IDE(集成开发环境):像Visual Studio、Eclipse、Code::Blocks和Dev-C++等IDE都可以用来编写、编辑、调试运行C语言代码。 2. 编辑器:像Sublime Text、Atom、Notepad++和Vim等文本编辑器都可以用来编写C语言代码,并在命令行终端或者终端模拟器上编译运行。 3. 在线编译器:一些在线编译器,如Repl.it、Ideone、Codechef和Codepad等,提供了在线编写、编译运行C语言代码的环境。 总之,有很多可以用来运行C语言的软件选项,你可以根据自己的需要和偏好来选择。 ### 回答2: C语言是一种通用的编程语言,可以在许多操作系统下运行。以下是一些常用的软件来运行C语言代码: 1. 终端编译器:常见的终端编译器包括GNU GCC(GNU Compiler Collection)和Clang。它们可在多个平台上运行,如Linux、macOS和Windows。 2. 集成开发环境(IDE):IDE提供了一个集成的开发环境,可以编写、编辑、编译调试C代码。常见的IDE包括Visual Studio(适用于Windows)、Xcode(适用于macOS)和Code::Blocks(适用于多个平台)。 3. 文本编辑器:文本编辑器可以用于编写C代码,并使用终端编译器来编译运行代码。一些常用的文本编辑器包括Notepad++(适用于Windows)、Sublime Text和Atom(跨平台)。 4. 在线编译器:在线编译器是运行在互联网上的编译器,可以直接在浏览器中编写、编译运行C代码。一些常用的在线编译器包括Repl.it、ideone和JDoodle。 需要注意的是,无论选择哪种软件来运行C语言代码,都需要安装并配置好C语言的编译器,以便将源代码转换为可执行文件。同时,也需要了解如何使用编译器和调试器来调试代码,并学会创建Makefile和使用命令行来编译运行C程序。 ### 回答3: C语言是一种高级编程语言,可以在多种开发环境中运行。以下是一些常用的软件和平台,可以用于编写和运行C语言程序: 1. Microsoft Visual Studio:这是一个功能强大的集成开发环境(IDE),支持多种编程语言,包括C语言。Visual Studio提供了用于编译调试运行C语言程序的工具。 2. Eclipse:这是另一个流行的开发环境,支持多种编程语言,包括C语言。Eclipse具有丰富的插件,可以扩展其功能,以满足不同的需求。 3. Code::Blocks:这是一个开源的跨平台集成开发环境,专注于C和C++语言。Code::Blocks提供了一个友好的用户界面和强大的功能,可以编译运行C语言程序。 4. Xcode:这是苹果公司开发的集成开发环境,适用于Mac OS平台。Xcode支持多种编程语言,包括C语言。它提供了丰富的开发工具和调试器,以帮助开发人员开发和调试C语言程序。 此外,还有一些纯粹的文本编辑器,如Sublime Text、Notepad++,也可以用于编写C语言程序。这些编辑器通常不具备集成的编译调试功能,但可以将C代码保存为文件,并使用命令行工具进行编译运行。 总之,有很多软件和开发环境可以用于编写和运行C语言程序,开发者可以根据自己的需求和偏好选择合适的工具。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值