操作是在windows环境,linux应该操作差不多
0x01 安装minGW
我这里用到的是minGW
安装完成后还需要添加make,执行下面命令,因为我需要用到Makefile文件
mingw-get install mingw32-make
0x02 配置调试
先来试试调试,按下F5的时候如果你没有launch.js文件,则会提示你创建一个,然后选择 C++(GDB/LLDB)
创建之后先编译一个程序试试
#include <stdio.h>
int main(){
printf("Hello,World!\n");
char a=getchar();
printf("input char:%c\n",a);
return 0;
}
//编译加 -g 参数
//gcc -g heelo.c -o hello
//在同一目录下生成 hello.exe
配置launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",//调试的名字
"type": "cppdbg",
"request": "launch",
"program": "hello.exe",//程序的目录
"args": [],//参数 不管
"stopAtEntry": false,
"cwd": "${workspaceFolder}",//运行目录
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "E:\\mingw\\bin\\gdb.exe",//gdb目录
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
然后再在哪个文件按下F5,就可以愉快的下断点调试了,左侧可以查看变量的值
0x03 make编译调试
然后因为我有一些其他的想法,用到了Makefile,我得先make一次,然后再编译,如果按照上面的方法就得先在cmd里面输入一次make,然后再f5调试,我想直接f5,一步完成,最主要的是在launch.json里面增加一项配置preLaunchTask,配置先执行的任务
先写一下Makefile
g=gcc -g
obj=hello.o
hello:$(obj)
$(g) $(obj) -o hello
hello.o:
$(g) -c hello.c
make一次,还不错,然后改一下launch.json文件
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\hello.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "E:\\mingw\\bin\\gdb.exe",
"preLaunchTask": "build",//先运行的任务build是任务名字
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
然后会提示你创建一个task.json的文件
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "mingw32-make",//执行的命令,make文件路径 我这里配置了环境变量,所以可以直接写
"args": ["hello"]//执行的时候后面附加的参数
}
]
}
然后F5的时候,就可以直接调试啦,下面终端是显示的执行的命令
我这里没写args,写了后终端应该显示 > Executing task: mingw32-make hello <
然后记录一下VSCode的一些自带变量
官方文档:https://code.visualstudio.com/docs/editor/variables-reference
${workspaceRoot} 当前打开的文件夹的绝对路径+文件夹的名字
${workspaceRootFolderName} 当前打开的文件夹的名字
${file} 当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名
${relativeFile} 从当前打开的文件夹到当前打开的文件的路径
${fileBasename} 当前打开的文件名+后缀名,不包括路径
${fileBasenameNoExtension} 当前打开的文件的文件名,不包括路径和后缀名
${fileDirname} 当前打开的文件所在的绝对路径,不包括文件名
${fileExtname} 当前打开的文件的后缀名
${cwd} 启动时的当前工作目录
${lineNumber} 当前打开的文件,光标所在的行数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。