轻松使用VSCode调试(TS、C/C++、Python、Rust)

1,344 阅读4分钟

前言

接上面一篇 轻松玩转vscode中Debugger调试之后, 仅说明了常规debugger的一些方式和概念。

如何通过vscode调试其他语言,我们进一步尝试。

接下来主要介绍下以下语言的调试过程:

  1. 调试ts
  2. 调试c/c++
  3. 调试python
  4. 调试rust

接下来所有的配置都是默认已经安装对应语言的环境,具体自行安装。

对应的调试插件可以在插件市场找到,链接: vscode应用市场调试相关插件

1. 调试ts

VSCode内置的 Node.js 调试器以及 Edge 和 Chrome 调试器支持 TypeScript 调试。

ts调试介绍两种:

  • tsc
  • ts-node

1.1 tsc

要使用tsc进行调试,必须要TypeScript 文件生成map文件,使用 --sourcemap 选项进行编译,或将 tsconfig.json 文件中的 sourceMap 属性设置为 true。这样才能开启调试。

具体步骤如下:

  1. 新建一个index.ts文件,使用tsc --init生成tsconfig.json文件。

index.ts:

let a:number = 5;
let b:number = 10;
let c:number = 15;

tsconfig.json:

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out",
    "sourceMap": true
  }
}
  1. 运行tsc,tsc是typescript自带的命令工具,会编译所有文件,分别对应生成js文件和js.map映射文件。

注意:如果不生成文件,直接调试是不会启动的

image.png

  1. 通过F5或者侧边栏点击Run and Debug即可运行调试ts文件。

image.png

那么有没有方式可以直接执行ts文件进行调试,答案是有的。

1.2 ts-node

ts-node用于 node.js 的 TypeScript 执行和 REPL,具有源映射和本机 ESM 支持。简单说就是可以直接使用ts-node命令直接运行ts文件。不需要修改tsconfig.json,也不用执行生成map文件。

具体步骤:

  1. 使用npm i -g ts-node安装
  2. 终端中运行ts-node index.ts

image.png

1.3 使用launch.json文件进行设置调试

那如果我非要使用tsc进行一键调试呢?那我们可以通过launch.json文件的设置达到,

创建默认:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "skipFiles": [
                "<node_internals>/**"
            ],
            "program": "${workspaceFolder}\\index.ts",
            "outFiles": [
                "${workspaceFolder}/**/*.js"
            ]
        }
    ]
}

因为使用tsc调试ts类型文件,需要生成js和map文件,所以就需要在configurations中添加preLaunchTask,这项配置是在启动调试前执行,告知调试器在何处查找生成的 JavaScript 文件。

"preLaunchTask": "tsc: build - tsconfig.json",

如果生成的(转译)JavaScript 文件不位于其源文件旁边,可以通过在启动配置中设置 outFiles 属性定义。每当在原始源中设置断点时,VS Code 都会尝试通过搜索 outFiles 中的 glob 模式指定的文件来查找生成的源文件。

最后,可以直接通过侧边栏调式Run and Debug直接启动。

image.png

2. 调试c/c++

要进行c/c++调试,具体步骤如下:

  1. 安装插件

image.png

  1. 创建launch.json
  • 2.1 点击生成launch.json文件

image.png image.png

image.png

默认生成:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "enter program name, for example ${workspaceFolder}/a.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/path/to/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }


    ]
}

需要进行修改为:

launch.json具体内容修改如下:

//该文件用于配置调试器,描述如何运行和调试 C/C++ 程序。
{
    "configurations": [
        {
            // 配置名称,用于在调试器中选择
            "name": "C/C++ debug", 
            // 指定调试器类型,cppdbg 表示使用 C/C++ 调试器扩展
            "type": "cppdbg",
            // 调试模式。launch 表示启动新程序进行调试,attach 用于附加到已有进程
            "request": "launch",
            // 被调试程序的路径,${fileDirname} 是当前文件目录,${fileBasenameNoExtension} 是当前文件名(不含扩展名)
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            // 传递给程序的命令行参数,空数组表示不传递任何参数
            "args": [],
            // 是否在程序入口处暂停。false 表示直接运行到第一个断点
            "stopAtEntry": false,
            // 调试时的工作目录,通常设置为程序所在目录
            "cwd": "${fileDirname}",
            // 传递给调试进程的环境变量,数组为空表示使用默认环境变量
            "environment": [],
            // 是否在外部控制台显示调试信息。false 表示使用内置终端
            "externalConsole": false,
            // 指定使用的调试器协议。gdb 表示使用 GNU 调试器
            "MIMode": "gdb",
            // gdb的安装路径,根据自身安装路径配置
            "miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",
            // 调试器启动时执行的命令
            "setupCommands": [
                // 启用变量的友好显示格式
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    // 如果命令失败是否继续运行,true 表示忽略错误
                    "ignoreFailures": true 
                },
                // 设置反汇编格式为 Intel 风格
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            // 调试前执行的任务,tasks.json 中定义的任务名称
            "preLaunchTask": "C/C++: gcc.exe build active file"
        }
    ],
    "version": "2.0.0"
}
  • 2.2 新建task.json文件,用于调试器前执行的操作:
// 该文件定义了构建任务,用于编译代码
{
    "tasks": [
        // c 编译
        {
            // 任务类型,shell 表示执行 shell 命令
            "type": "shell",
            // 任务名称,供调试器或任务面板使用
            "label": "C/C++: gcc.exe build active file",
            // 执行的命令,指定 GCC 编译器路径
            "command": "C:\\msys64\\ucrt64\\bin\\gcc.exe",
            // 命令行参数
            "args": [
                // 启用彩色输出
                "-fdiagnostics-color=always",
                // 启用调试信息
                "-g",
                // 当前编辑的源文件
                "${file}",
                // 指定输出文件路径
                "-o",
                // 生成与源文件同名的 .exe 文件
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                // 任务运行的工作目录
                "cwd": "${fileDirname}"
            },
            // 用于解析编译器输出中的错误信息,$gcc 是 GCC 编译器的默认匹配器
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            // 说明
            "detail": "Task generated by Debugger."
        },
        // c++ 编译
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            // 用于指定任务所属的组,
            "group": {
                // 任务的类型 build 表示构建任务 "test": 表示测试任务 其他不会触发内置操作
                "kind": "build",
                // 标志这是该类型的默认任务
                "isDefault": true 
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}
  • 2.3 新建一个.c或者.cpp文件点击调试:

    • c调试 image.png

    • c++调试

image.png

3. 调试python

python调试具体步骤如下:

  1. 安装插件Python、Python Debugger

image.png

  1. 生成默认配置文件
{
    "name": "Python Debugger: Current File",
    "type": "debugpy",
    "request": "launch",
    "program": "${file}",
    "console": "integratedTerminal"
},

3. 运行 image.png

4. 调试rust

rust调试比较简单,只需要安装插件rust-analyzer即可

image.png

image.png

image.png

总结

主要介绍了ts、c/c++、python、rust调试过程。在vscode中使用调试器需要安装相关插件和环境,调试配置主要配置在 launch.json中。比如c/c++需要通过预设的 preLaunchTask项在task.json文件中设置进行自动编译。

如有错误,请指正O^O !

可以接着看:

轻松使用VSCode调试vue项目