Ubuntu+Visual Studio Code - 编译C
一、下载与安装
官方下载:https://code.visualstudio.com/
下载deb安装文件
安装命令:
sudo dpkg -i ./code_1.16.0-1504714880_amd64.deb
二、安装插件
安装以下C语插件:
- C/C++
- C/C++ Clang Command Adapter
- C++ Intellisense
还可根据自己需要,安装其它插件
三、进行调试
以下采用CGIC中的HelloWorld为例
1.程序编写
新建一个文件夹,作为项目的根目录,把需要用到的cgic.c与cgic.h放到目录中。
在VS Code中打开:文件—>打开文件夹
在项目目录中添加C文件进行编写,程序代码:
#include<stdio.h>
#include "cgic.h"
#include <string.h>
#include <stdlib.h>
int cgiMain(){
cgiHeaderContentType("text/html");
fprintf(cgiOut, "<HTML><HEAD>\n");
fprintf(cgiOut, "<TITLE>My First CGI</TITLE></HEAD>\n");
fprintf(cgiOut, "<BODY><H1>Hello World</H1></BODY>\n");
fprintf(cgiOut, "</HTML>\n");
return 0;
}
2.任务配置
任务配置用作程序的编译,在项目目录中添加.vscode文件夹,再在.vscode文件夹中添加tasks.json文件,文件内容与作用如下:
{
"version": "2.0.0",
"tasks": [
{
"taskName": "Compile", // 任务名称,与launch.json的preLaunchTask相对应
"command": "gcc", // 如果用MinGW,编译C用gcc,编译c++用g++
"args": [
"cgic.c",
"HelloWorld.c",
"-o", // 指定输出文件名,不加该参数则默认输出a.out
"${workspaceRoot}/${fileBasenameNoExtension}.cgi",
"-g", // 生成和调试有关的信息
"-Og",
"-Wall" // 开启额外警告
], // 编译命令参数
"type": "shell",
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceRoot}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", // 正则表达式,用于描述在“问题”栏中显示的信息。
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
]
}
可在任务—>运行任务中调用,开始编译生成程序
3.调试配置
在./vscode文件夹中添加launch.json文件,用作调试,内容与作用如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",// 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg",// 配置类型,这里只能为cppdbg
"request": "launch",// 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${workspaceRoot}/${fileBasenameNoExtension}.cgi",// 将要进行调试的程序的路径
"args": [],// 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,我一般设置为true
"cwd": "${workspaceRoot}",// 调试程序时的工作目录
"environment": [],// (环境变量?)
"externalConsole": true,// 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",// 指定连接的调试器,可以为gdb或lldb。
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的taskName相对应
}
]
}
4.调试
在代码窗口左侧可以添加断点,点击调试—>启动调试可开始进行调试