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

相关推荐
CAE虚拟与现实1 天前
VSCode中的下载VSIX是指什么?
ide·vscode·编辑器
路边闲人21 天前
vscode启用GEMINI CODE ASSIST插件
ide·vscode·gemini
CAE虚拟与现实1 天前
VSCode官方汉化包
ide·vscode·编辑器·vscode汉化
CAE虚拟与现实1 天前
VSCode创建Python项目和运行py文件
ide·vscode·编辑器
Stardep1 天前
ssh远程连接服务器到vscode上“连接失败”
服务器·vscode·ssh
superior tigre2 天前
1.linux环境配置+ssh远程连接vscode调试(问题:无法联网,无法共享粘贴板,不满足运行vscode服务器的先决条件)
linux·服务器·vscode
老黄编程2 天前
VSCode 的百度 AI编程插件
ide·vscode·ai编程
老黄编程2 天前
VSCode AI编程插件
ide·vscode·ai编程
Naiva2 天前
ESP32-C3 入门09:基于 ESP-IDF + LVGL + ST7789 的 1.54寸 WiFi 时钟(SquareLine Studio 移植)
ide·笔记·vscode
return(b,a%b);2 天前
VSCode 远程开发连接(glibc<2.28)
ide·vscode·编辑器