vscode C/C++多文件编译和调试(linux)

前言

最近一直在使用vscode编写C/C++,除去偶尔写一些单个文件的代码,更多时候需要写多文件的编程,甚至有时候编译代码需要链接库。
编译项目通常可以使用终端,但是使用终端每次都要写一串很长的命令,不如使用vscode编译来的便捷。但是,vscode的编译虽然不难也是需要掌握一些知识才能顺利编译成功,并且进行后续调试代码。

准备工作

在多文件编译调试之前,我们得先写好多个文件,并且有的文件存在调用关系。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面几个文件的关系如下:
在这里插入图片描述

主要步骤

在进行调试和编译之前我们需要明白:
1,task.json是vscode中用于定义任务的配置文件,它实际上是终端命令的一个代替,它实现的效果和你在终端敲命令的效果是一样的,在vscode操作是更加便捷的。
2,调试是在编译成功的基础之上进行的,只有编译生成的可执行文件才能进行调试。

编译

1,点击终端
2,选择配置任务
3,因为是c++项目,选择g++生成活动文件
在这里插入图片描述
在这里插入图片描述
vscode会生成一个task.json文件,在task.json文件中自动生成下面内容:

"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++ 生成活动文件",
			"command": "/usr/bin/g++",
			"args": [
				"-fdiagnostics-color=always",
				"-g",
				"${file}",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: /usr/bin/g++"
		}
	]

生成的这个任务配置对于单个文件的执行是没有问题的,但是对于多文件这样的写法是不能够链接其他文件,于是参照网上写法把task.json文件改为:

"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++ 生成活动文件",
			"command": "/usr/bin/g++",
			"args": [
				"-fdiagnostics-color=always",
				"-g",
				"\"${workspaceFolder}\"/chat_client.cpp",
				"\"${workspaceFolder}\"/kcp_client.cpp",
				"\"${workspaceFolder}\"/kcp_session.cpp",
				"\"${workspaceFolder}\"/udp_socket.cpp",
				"\"${workspaceFolder}\"/*.c",
				"-o",
				"${fileDirname}/${fileBasenameNoExtension}",
				"-lpthread"
			],
			"options": {
				"cwd": "${fileDirname}"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",
			"detail": "编译器: /usr/bin/g++"
		}
	]

这个改动版本有几个需要注意的点:
1,KaTeX parse error: Expected group as argument to '\"' at end of input: …隔符; 2,为什么没有写成\"{workspaceFolder}"/*.cpp,是因为我的文件中除了chat_client.cpp还有chat_server.cpp,它们都存在main函数,以及ikcp.c中的函数被他们多次的编译和连接;
3,因为我的代码使用了线程库,在终端编译时需要加-lpthread,所以这里也在任务配置中添加了。

调试

1,点击运行
2,选择启动调试
3,如果会弹出选择环境,选择GDB调试,可能因为我以前选过就不在弹出
在这里插入图片描述
在.vscode文件夹中,能明显看到调试生成的文件launch.json
在这里插入图片描述
在里面的内容大致如下:

 "configurations": [
        {
            "name": "C/C++: g++ 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": ["192.168.80.128","8002"],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]

在这里我做了两处修改:
1,要想正确运行编译好的程序需要输入ip和端口,所以我在args参数中输入了ip和端口的值;
2,在后续调试的过程中,需要输入内容,所以我把externalConsole的值调为true,这样调试时程序会在外部中断运行,可以方便接收输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值