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

相关推荐
哇咔咔哇咔13 小时前
使用Markdown编写适用于GitHub的README.md文件的目录结构
vscode·markdown
羊小猪~~18 小时前
神经网络基础--什么是神经网络?? 常用激活函数是什么???
人工智能·vscode·深度学习·神经网络·机器学习
Eiceblue19 小时前
Python 在PDF中绘制形状(线条、矩形、椭圆形等)
vscode·python·pycharm·pdf
tekin1 天前
vscode php Launch built-in server and debug, PHP内置服务xdebug调试,自定义启动参数配置使用示例
ide·vscode·php·launch.json·runtimeargs·php内置服务自定义参数
曹申阳1 天前
vscode 创建 vue 项目时,配置文件为什么收缩到一起展示了?
ide·vue.js·vscode
丶Darling.1 天前
vscode在windows和linux如何使用cmake构建项目并make生成可执行文件,两者有什么区别
linux·windows·vscode
羊小猪~~2 天前
前端入门一之CSS知识详解
前端·javascript·css·vscode·前端框架·html·javas
苏三有春2 天前
【解决办法】无法使用右键“通过VSCode打开文件夹”
ide·vscode·编辑器
z千鑫3 天前
【VScode】VScode内的ChatGPT插件——CodeMoss全解析与实用教程
ide·人工智能·vscode·ai·chatgpt·编辑器·ai编程
single5943 天前
【综合算法学习】(第十九篇)
java·数据结构·c++·vscode·算法·leetcode