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

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

ftw /bin

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

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

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

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

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

{"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,可以按照以下格式添加:
{"cmake.debugConfig": {"args": ["first_arg","second-arg","third arg"]}
}
  1. 点击 VSCode 底部状态栏中的 Debug 按钮或者 Launch 按钮运行你的程序。

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

#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 程序了。
例子输出为:

总参数个数为:41个参数为:/home/Helloworld/build/Helloworld
第2个参数为:first_arg
第3个参数为:second-arg
第4个参数为:three arg

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/614962.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Games101Homework【6】Acceleration structure(Including framework analysis)

Code Analysis&#xff1a; friend&#xff1a; C中友元&#xff08;友元函数和友元类&#xff09;的用法和功能_friend class a<b>-CSDN博客 [C&#xff1a;不如Coding]&#xff08;11&#xff09;&#xff1a;友元函数与友元类_哔哩哔哩_bilibili Here is a simple…

Ja-netfilter(idea激活码破解原理)分析

Ja-netfilter&#xff08;idea破解&#xff09;分析 简介 ja-netfilter是一款可以破解jetbrainsIDE系列的javaagent jar 包。 原理简介 通过javaagent创造修改字节码的时机。通过asm修改相关类&#xff0c;达到hook特定方法的作用。主要依赖power&#xff08;rsa方法hook&a…

线 程 池

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.Stat…

postgresql uuid

示例数据库版本PG16&#xff0c;对于参照官方文档截图&#xff0c;可以在最上方切换到对应版本查看&#xff0c;相差不大。 方法一&#xff1a;自带函数 select gen_random_uuid(); 去掉四个斜杠&#xff0c;简化成32位 select replace(gen_random_uuid()::text, -, ); 官网介绍…

Spring Cloud系列(二):Eureka Server应用

系列文章 Spring Cloud系列(一)&#xff1a;Spirng Cloud变化 Spring Cloud系列(二)&#xff1a;Eureka Server应用 目录 前言 注册中心对比 Nacos Zookeeper Consul 搭建服务 准备 搭建 搭建父模块 搭建Server模块 启动服务 测试 其他 前言 前面针对新版本的变化有了…

【vue】v-model.lazy等(非实时渲染)

v-model&#xff1a;实时渲染v-model.lazy&#xff1a;失去焦点/按回车后&#xff0c;才渲染v-model.number&#xff1a;值转换为数字v-model.trim&#xff1a;去除首尾空格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

ansible的常见用法

目录 ##编辑hosts文件 ##copy模块##复制过去 ##fetch模块##拉取 ##shell模块 ##好用 ##command模块## ##file模块### ##cron模块### ##crontab 计划任务 ##下载好时间插件 ##script模块 ##yum模块## ##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo ##ser…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型的出现

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力&#xff0c;但迄今为止&#xff0c;它们的能力主要局限于文本处理。然而&#xff0c;现实世界是一个多模式的环境&#xff0c;信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

刷题之动态规划-两个数组

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的两个数组类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0…

php其他反序列化知识学习

简单总结一下最近学习的&#xff0c;php其他的一些反序列化知识 phar soap session 其他 __wakeup绕过gc绕过异常非公有属性&#xff0c;类名大小写不敏感正则匹配&#xff0c;十六进制绕过关键字检测原生类的利用 phar 基础知识 在 之前学习的反序列化利用中&#xff0…

go websocket

WebSocket 是一种网络协议&#xff0c;建立在 HTTP 协议之上&#xff0c;允许双向通信。WebSocket 协议允许服务器发送数据到客户端&#xff0c;同时也可以让客户端向服务器发送数据。WebSocket 使用 HTTP 协议的升级请求和响应来建立连接。WebSocket 的主要优点在于它可以通过…

【JAVA基础篇教学】第十篇:Java中Map详解说明

博主打算从0-1讲解下java基础教学&#xff0c;今天教学第十篇&#xff1a;Java中Map详解说明。 在 Java 编程中&#xff0c;Map 接口代表了一种键值对的集合&#xff0c;每个键对应一个值。Map 接口提供了一系列操作方法&#xff0c;可以方便地对键值对进行增删改查等操作。本…