VSCode+Cmake 调试时向目标传递参数

我有一个遍历文件层次结构的程序,程序根据传入的文件路径,对该路径下的所有文件进行遍历。这个程序生成一个名为 ftw 的可执行文件,如果我要遍历 /bin 目录,用法为:

bash 复制代码
ftw /bin

问题是,如果我想单步跟踪,看看程序是如何遍历文件层次结构的,那么在启动调试器时,需要知道传给 ftw 程序的路径是什么,而且需要调试器自动传给 ftw 。

我查找了资料,资料告诉我:

在使用VSCode和CMake编写C程序并进行调试时,你可以通过设置 launch.json 文件来传递参数。以下是实现的步骤:

  1. 配置调试启动文件 launch.json 打开VSCode,切换到调试视图,点击配置(齿轮图标)或者选择 "创建一个启动配置文件",然后选择 "C++(GDB/LLDB)"。

  2. 修改 launch.json 文件: 找到 "configurations" 部分,并创建一个新的配置,类似于下面的示例:

json 复制代码
{
    "version": "0.2",
    "configurations": [
        {
            "name": "CMake Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/your_executable", // 修改成你的可执行文件路径
            "args": ["arg1", "arg2", "arg3"], // 在这里传入参数
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "cmake-build-debug"
        }
    ]
}

确保将 "program" 字段设置为构建后的可执行文件路径。在 "args" 字段中,将需要传入的参数作为一个数组填入。

  1. 保存 launch.json 文件,并返回到调试视图。

  2. 开始调试: 点击调试按钮开始调试,VSCode 将会使用你在 launch.json 文件中配置的参数来运行你的程序。

通过这样的方式,你就可以在进入调试之前传入参数了。

但是这种方式对我的代码不起作用,我所使用的是 CMake Debug,如下图所示。(也可以使用快捷键 Ctrl + F5)

通过测试,发现以下步骤可以正确传入参数:

在 Linux 环境下使用 VSCodeCMake 编写 C 程序,并且需要在进入调试之前传递参数,你可以按照以下步骤操作:

  1. .vscode 目录下,创建一个名为 settings.json 的文件。
  2. 编辑 settings.json 文件,将待传递的参数写入 cmake.debugConfig 部分。例如,如果你想传递参数 first_argsecond-arg third arg,可以按照以下格式添加:
json 复制代码
{
    "cmake.debugConfig": {
        "args": [
            "first_arg",
            "second-arg",
            "third arg"
        ]
    }
}
  1. 点击 VSCode 底部状态栏中的 Debug 按钮或者 Launch 按钮运行你的程序。

这样,你的 C 程序将会接收到传递的参数。在你的 main.c 文件中,你可以使用 argcargv 来获取这些参数。例如:

c 复制代码
#include <stdio.h>

int main(int argc, char **argv) {
    printf("总参数个数为:%d\n", argc);
    for (int i = 0; i < argc; i++) {
        printf("第%d个参数为:%s\n", i + 1, argv[i]);
    }
    return 0;
}

这样,你就可以在进入调试之前成功传递参数给你的 C 程序了。

例子输出为:

c 复制代码
总参数个数为:4
第1个参数为:/home/Helloworld/build/Helloworld
第2个参数为:first_arg
第3个参数为:second-arg
第4个参数为:three arg

那么,为什么在 launch.json 中设置 "args" 不起作用

这是以为 launch.json 不是由 CMake 工具调试或运行功能使用的,而是由 F5 使用的。

相关推荐
格数致用6 小时前
银河麒麟 V10 SP1 桌面操作系统 + VSCode + Claude Code 接入 DeepSeek-V4 全流程教程(2026年最新)
vscode·claudecode·银河麒麟 v10
我一定会有钱8 小时前
打造完美工作流:Git 配置”一次推送,三端同步”(Gitee/GitCode/GitHub)
开发语言·windows·vscode·搜索引擎·gitlab·github·visual studio code
宿67410 小时前
vscode文件夹
前端·vue.js·vscode
csdn_aspnet1 天前
2026 年 9 款最佳开源 AI 编码助手及常见问题解答
vscode·continue·cline·goose·ai编码·aider·opencode
任逍遥20111 天前
免费!VS Code 行为树编辑器 micBT:行为树生成、编辑、推演、调试
vscode·行为树·vscode插件·micbt
林三的日常1 天前
【无标题】
java·spring boot·vscode·调试·后端开发
Super 含1 天前
Android 包体积优化(一):APK 到底大在哪里?从 APK 结构到体积分析
android·ide·vscode
舞动青春881 天前
vscode copilot配置kimi k3
ide·vscode·copilot
golang学习记2 天前
VS Code 2026年的正确的打开方式
vscode
BIBI20493 天前
Windows 下 Maven 安装与 VSCode 配置
java·windows·vscode·maven·环境搭建·安装教程