3
操作是在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} 当前打开的文件,光标所在的行数


幻令
275 声望1 粉丝