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 使用的。

相关推荐
爱就是恒久忍耐15 天前
VSCode里如何比较2个branch
ide·vscode·编辑器
意法半导体STM3215 天前
【官方原创】如何为STM32CubeMX2配置Visual Studio Code配置方案
vscode·stm32·单片机·嵌入式硬件·策略模式·stm32cubemx·嵌入式开发
bloglin9999915 天前
vscode中可视化的合并分支,在“合并编辑器中解析”中“与基线进行比较”是什么意思
ide·vscode·编辑器
天疆说15 天前
在 Ubuntu 的 VSCode 中配置 MATLAB
vscode·ubuntu·matlab
春日见16 天前
vscode的AI编程插件推荐:
大数据·ide·vscode·算法·机器学习·编辑器·ai编程
jieshenai16 天前
VScode sys.path,并使CTRL+左键可访问源码
ide·vscode·编辑器
qq_4480111616 天前
VSCode环境搭建
ide·vscode·编辑器
qq_3384323716 天前
VSCode Remote-SSH 远程 Windows Server 卡死的排查与解决
windows·vscode·ssh
console.log('npc')16 天前
Codex 桌面端接入 Headroom 压缩代理完整教程
前端·vscode
女神下凡17 天前
这是 Cursor(Composer) 的五种核心交互模式
服务器·人工智能·windows·vscode·microsoft