范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

catch(ENV)配置VSCode编译调试VisualStudioC项目

  一。为什么放弃在Visual Studio IDE下Coding?PC有点拉跨,启动Visual Studio加载环境较慢,PC上装了多套VS,旧版本加载速度还行,但较新的版本如Visual Studio 2019,频繁地"无法响应并等待"太捉急VSCode是一款相当优秀的编辑器,有强大的插件支持,简单说就是在其下Coding,效率起飞由于第2点描述,其他日常编码工作如shell脚本、golang等已全面切换至VSCode,想要All in One
  二。那么,开始配置前,需要了解和做些什么?VSCode是且只是编辑器,虽然通过插件的支持可以进行构建和调试项目,但它不是IDE,它的天职是编辑,至于构建过程如编译链接就该给谁做就给谁做好了安装VSCode与必要插件,
  三。*踩坑摸索网上查资料看有没类似案例,残念,要么大部分都是配置mingw,链接没点开直接弃;要么是按照VSCode官方配置MSVC,见Configure Visual Studio Code for Microsoft C++,概览后直接弃,单纯不喜欢,只想启动VSCode直接有个干净的开发环境,想写C++写C++,想写脚本写脚本,想让我通过开发环境命令行启动VSCode?不可能的;最后在一位国外老哥的一篇配置文章中,见https://dev.to/masoudr/build-and-debug-c-application-with-vscode-and-msvc-pfc,看到了些许希望,开坑坑很大,填一个又来一个,边填边学,3个关键配置文件及其作用,lauch.json(调试启动用)、tasks.json(构建用)、c_cpp_properties.json(智能提示用),C/C++插件处理代码编写、构建、调试是三个相对独立的过程需分别看待国外老哥在构建即tasks.json中直接配置以shell方式启动cl.exe编译器,这个虽然和现有项目情况不大符,公司现有项目的VS工程不会废除(只有我想用VSCode,总不能搞事情让其他同事都不用VS吧),那么VSCode里配置的编译和链接参数就要和VS工程里的保持一致,这么多的参数写进tasks.json里实在是又繁琐又容易出错;但作为hello world是可以学习到配置机制的,这时踩的第一个坑就是"聪明蛋"(cmd)对空格及特殊符号的处理(cmd菜鸡表示太难用了),因为VSCode启动task时自动调用的是cmd /d /c [command],当然终端配置的是cmd,如果配置powershell,肯定调用的是不同的命令,这里不再验证;这个/c开关可要了命了,引号总会莫名其妙丢了,最终cmd /? 去找男人,原来
  (可以在第一个引号前加@进行欺骗来规避,不再赘述踩坑流程)由于PC上存在多VS环境,所以一直有个念头是否加载了正确的构建环境,解决完空格问题后便开始验证,再次残念,国外老哥的build命令实际上是有问题的,
  "buildCommand": "C:Program^ Files^ ^(x86^)Microsoft^ Visual^ Studio2019EnterpriseCommon7ToolsVsDevCmd.bat && cl"
  他用&&连接命令,但实际上达不到他想要的效果。他是想先加载构建环境,加载成功后使用构建环境里的cl编译命令,但cl执行时,环境并未加载进来,可如此验证
  打开cmd.exe,执行类似命令行语句(如使用PC上的VS2010环境)
  这是正确加载到了构建环境的输出,注意cl的版本信息
  重新打开cmd.exe(原先的cmd窗口里已存在构建环境,所以必须重新打开一个新的cmd窗口,这里也是容易疏忽踩坑的地方),再次执行命令行语句
  cl却无法正确识别,说明cl执行时环境加载失败,原因未找到详细解释,应该和cmd批处理机制有关,未深究;实际上我一开始执行此命令是成功的,原因是安装VS2015的时候自动设置了PATH变量,所以cl调用的是VS2015的开发环境里cl命令,现在PATH里删除了该配置固报错,这也是前文提示注意cl版本信息的原因
  尽管外国老哥的build命令存在问题,但却提供了构建思路,即先加载构建环境,然后调用构建工具,这也与VSCode官方方式通过开发环境cmd启动VSCode的描述相吻合;由于受到项目等种种约束,我这里的构建方式也明确下来了VSCode启动定制的外部构建脚本,把构建工作交给脚本,脚本里调用VS工程命令行工具进行构建,这样因为VS工程文件必须存在,也就不必把繁琐的编译链接参数写进VSCode配置文件,但新增文件时就需要注意,一定要把它加进VS工程文件里构建的坑填完后,就是智能提示intellisense了,根据官方描述c_cpp_properties.json reference进行配置,这里主要是配置编译器路径(compilerPath)这个选项,配置后intellisense会查询编译器确定系统include目录以及预定义宏,由于PC上存在多VS环境,而对它的查询机制又不了解,能否查询到正确的include就是个未知数,而且VS2015与VS2019可以选择windows sdk版本,依赖的include路径是不同的,虽然可以在c_cpp_properties.json里配置windows sdk版本,但我填写VS2015里winsdk 8.1版本时,include路径是不对的,可在cpp里写个printf语句,然后看跳转到其函数声明文件路径即可判定,所以我放弃通过编译器查询,手撸,把include路径写进settings.json里,然后使用配置的值即可,是一次性配置,以后直接引用;确定这些路径也很简单,这里以VS2010为例,
  调试的坑主要就是输出内容到终端这个了,按照国外老哥的配置,只有程序运行结束时,才会把打印内容输出到调试控制台,这是无法接受的,可通过配置launch.json里的console值,把打印输出到其他终端来解决,我选择了externalTerminal,可根据需要调整这个值至此,与最终方案相关的坑就基本填完了,中间当然出现更多与此方案无关的坑,比如我曾试图通过调用编译链接器来完成构建,但配置的每个task都要单独加载构建环境,而不能统一加载进来供多个task共享,这个环境继承问题是插件不支持的;这些坑就不再赘述
  四。开搞
  1.编写外部构建脚本在PC上找到所需Visual Studio加载开发环境的启动脚本,我这里配置了项目常用的VS2010和VS2015
  根据启动脚本的USAGE用法,确定构建脚本加载环境部分的传参确定用来构建VS工程的命令行命令,主要是devenv(Devenv command line switches - Visual Studio (Windows) | Microsoft Learn)与MSBuild(MSBuild on the command line - C++ | Microsoft Learn),我这里选择MSBuild,因为在测试中,devenv的加载速度有些慢,尤其是VS2015环境,而且MSBuild支持的参数更丰富,定制能力更强,devenv与MSBuild的区分不再赘述,可参考微软官方文档完善构建脚本的传参与校验
  环境加载调用:call /path/to/init/vc/env.bat构建命令调用:MSBuild …
  2.settings.json配置自定义变量用户区(userspace settings)自定义变量,这里定义的变量几乎不会变动,一次性配置
  主要关注几个使用绝对路径而未引用VSCode配置变量的地方,用来配置intellisense系统include,以及外部构建脚本build-vs.bat路径工作区(workspace settings)自定义变量,这里定义的变量随工程变动而变动
  其中,
  Project.Builder -- 使用哪个VS版本进行构建
  Project.SlnFile -- 工程sln文件名,这里自动设置为工作目录名.sln,一般工程名与目录名相同
  Project.Target -- 工程目标文件,这里自动设置为工作目录名.exe,一般目标文件名与目录名相同
  Project.Include -- 工程include目录,会与系统配置的include目录一起配置intellisense的include路径
  Project.Debug.CWD -- 调试程序启动时的当前工作目录,一般设置为生成最终目标文件的目录,如Debug,里面包含调试所需的pdb文件
  Project.Debug.Program -- 调试目标程序名
  Project.Debug.Args -- 目标程序的传参
  Project.Debug.PreTask -- 调试程序启动前置task标识,根据tasks.json来设置
  C_Cpp.default.* -- 用来配置intellisense相关配置,我这里是想把所有要变动的配置都配置在一个文件里,剩下的配置都是几乎不动的,所以写在settings.json里,当然都是可以配置进c_cpp_properties.json里的;如果想全都要,成,在c_cpp_properties.json配置项里使用${default}里引用C_Cpp.default相对应的值
  3.tasks.json配置构建任务
  这里配置构建task,以shell的形式执行外部构建脚本,其中,
  label -- task标识
  command -- 外部构建脚本,在userspace settings.json里配置的变量
  args -- 外部构建脚本传参,在workspace settings.json里配置的相关变量
  options->cwd -- 运行构建脚本时的当前工作目录,即工程目录,因为其包含了sln文件,这样就不用指定sln文件的绝对路径
  4.launch.json配置调试启动
  这里配置调试器启动配置,其中,
  type -- cppvsdbg,windows c++调试器
  request -- launch,启动,还可以配置attach,是附加到现有进程上去,这里不用
  program -- 调试目标程序,在workspace settings.json里配置的变量
  args -- 目标程序的传参,在workspace settings.json里配置的变量
  cwd -- 调试程序启动时的当前工作目录,在workspace settings.json里配置的变量
  environment -- 环境变量,如目标程序链接时是静态链接到dll的lib,而且dll又不在默认的搜索目录里,就需要把它所在的目录加入到环境变量里,不然启动目标程序的时候会因找不到dll而报错,具体追加环境变量的写法
  preLaunchTask -- 调试程序启动前的前置task,在workspace settings.json里配置的变量
  console -- 如果默认internalTerminal,在调试过程中的打印不会立即输出到终端上,需要等到程序运行结束才会输出;这里可选配置integratedTerminal,externalTerminal
  5.*c_cpp_properties.json配置intellisense智能提示,根据官方文档配置即可,如果配置了C_Cpp.default.*,则这个文件不是必须的
  6.运行调试运行,会启动前置build任务
  构建成功后,成功进入断点
  F12查看printf函数原型,路径正确,说明intellisense正确加载了include,当然F11单步调试是调试不到这里的
  外部终端正确打印内容
  收工
  五。资源
  配置文件和案例见(https://github.com/VVVylin/vsc-debug-vsproj-msbuild)

下午14点!权威媒体曝出争议猛料中超成国际笑话,球迷骂声一片北京时间11月26日下午14点,中国足球传来最新消息,确认,国内权威媒体体育大生意曝出争议猛料,他们表示中超广州赛区的各项准备工作进度不理想,在联赛快要开启的情况下,广州赛区前期工03!世预赛又一惨败,亚洲冠军6战0胜,12强赛第2位下课主帅诞生在03不敌韩国队之后,近日,伊拉克主帅艾德沃卡特宣布辞职,伊拉克足协同意并正式宣布了这一消息。而在此之前,叙利亚足协炒掉了今年夏天刚刚上任的主帅,艾德沃卡特也成为12强赛开始后,第又见国乒残暴110北京时间11月25日,世乒赛进入第二个比赛日,日本队遭遇重创,男单2人出局,国乒则是延续强势,陈幸同单局轰出110。整体来看,本次比赛国乒已渐入佳境。此外伊藤美诚首秀过关。王楚钦面日乒又爆出冷门!2大主力惨遭淘汰,与韩乒一样面临奖牌危机世乒赛单打32强赛正在火热进行,没想到刚进入第二日比赛,日乒再次爆出大冷门,主力队员丹羽孝希24不敌奥地利选手哈贝松出局,止步男单64强。这样的战绩对于丹羽孝希来说只能用遗憾来形容30!世界第一携手锁定世乒赛首胜,伊藤美诚联袂带来争冠悬念世乒赛第二个比赛日精彩来袭,女单世界第一携手钱天一上演赛事首秀,40横扫对手,表现非常强势此前,伊藤美诚携手早田希娜顺利完成比赛,联袂大胜对手,展现出不俗的整体实力,带来争冠悬念,当前十大围棋高手,都有谁?很多棋迷朋友们,尤其是一些刚刚了解围棋的,都会问一个问题谁下围棋最厉害?是柯洁申真谞还是朴廷桓?更进一步来说,历史上最厉害的棋手又是谁?前三前五前十都是哪些高手?对此,不同人有不同人气爆棚!孙杨回母校体测,参加圆桌对话,被喊话坚持到巴黎近期处于禁赛期的孙杨非常活跃,因为被禁赛51个月,所以他无法参加比赛,不过因为是场外的拒绝检测,并非使用违规的药物提高成绩,所以孙杨的成绩和纪录都被保留。最近一年多,孙杨稍显沉寂,不堪恶意排挤!韩国冬奥冠军加入中国国家队,被韩国人大骂叛徒2020年3月,韩国短道速滑冬奥冠军林孝俊入籍中国的消息让韩国人集体炸了锅。林孝俊1996年生,21岁为韩国夺得2017年短道速滑世界杯冠军2018年在平昌冬奥会上,夺得男子短道速陈梦仅丢12分,孙颖莎挺过削球关,中国女乒奥运主力携手晋级16强北京时间11月26日消息,2021年世界乒乓球锦标赛在美国休斯顿进入到第三天。女单第三轮,中国女乒奥运三大主力陈梦孙颖莎王曼昱分别击败各自对手,携手晋级16强,其中陈梦四局比赛仅丢勇士夺冠的关键162的战绩了,很难不把勇士当夺冠种子选手考虑了,但勇士还缺些什么?很多人都觉着克莱的复出就会让勇士无限接近总冠军了吧。但大伤两年的克莱回来能有几成战力,能不能在季后赛高强度对抗下连胜世界第1第2第3夺冠,小钢炮60横扫冲冠北京时间11月26日消息,2021年世界斯诺克英锦赛结束第三个比赛日的争夺。大师赛冠军颜丙涛,60战胜女子世锦赛冠军吴安仪强势晋级。另一场焦点比赛,小钢炮马克艾伦强势归来,他以62
把NS变成SteamDeck虽然很难,但一个玩家试着这样做了前段时间,Dbrand为SteamDeck打造了一款有点巨魔的贴纸该款贴纸的主要灵感来源是NS的红蓝设计。事实上,也有不少玩家正在SteamDeck上运行着yuzu或者Ryujin主动学习太难?把这个习惯养成了,终身受益!学习是你自己的事情,能不能主动学习啊!这句话这个道理谁都知道,家长说了无数遍还听了无数遍,但真正能够做到主动学习的孩子能有几个呢?养成需要锻炼重复,而主动学习状态习惯也是可以在反复国产操作系统uos与deepin如何选择?现在国产操作系统如雨后春笋般涌现出来,知名度较高的有uos,deepin银河麒麟中兴新支点等操作系统,现在我们把相似度较高的UOS和DEEPIN做一个对比。国产操作系统UOS众所周技术了解单细胞分析技术应用和未来即使在小规模的细胞群中,也可能存在异质性。如果一个细胞发生了变化,它不一定也会发生在其邻近的细胞中。这种变化是自然的,但在研究健康或疾病的组织或多细胞生物体时,会带来挑战。对细胞的2010赛季的青春之歌,独属于布拉泽维奇的申花青年军2023年2月8日的克罗地亚,米罗斯拉夫布拉泽维奇在故乡萨格勒布的医院安然辞世。这一天,距离他的88岁生日,只差两天。这位曾带领克罗地亚国家队创造98世界杯黑马奇迹的老帅被克罗地亚盘点十大体育赛事的大小王,篮球大王是乔丹,小王詹姆斯有质疑?全球十大体育赛事有哪些?分别是足球,篮球,乒乓球,网球,橄榄球,羽毛球,田径(最有代表性的是短跑,这个可以不用质疑了,全球热度最高的田径项目就是短跑),赛车,游泳,棒球。主要关注的研究显示美通胀达40年来最高水平,消费者信用卡违约达10年最高水平随着对经济衰退的担忧逐渐显现,2023年,通货膨胀仍可能给许多美国人的钱包带来压力。奥马哈第一国家银行(FNBO)在其2023年展望报告中表示我们认为,通胀在2022年达到40年来新年新学期,给孩子准备的新杂志订起来!很多家长会给孩子们买图书,但少儿杂志鲜有涉及。其实,订阅儿童期刊的好处不少。首先,杂志一般每月或每双月一期,定时收到的话,能给孩子们一种期待的东西终于到来的幸福感,也可以让他们学会(新华全媒)蓝领后浪新年新出发今年21岁的周诗航来自江西丰城,是宜春职业技术学院的一名学生,目前在江西国轩新能源科技有限公司实习,今年6月毕业后将成为这里的正式员工。年后开工后,周诗航选择留在家乡发展。作为公司新年新气象,到这些地方追逐一场海边的日出,幸运一整年!看一场海边的新年日出,赴一场散落人间的浪漫晨光洒向大海,是浪漫的开始。追逐一场破晓时分的日出,太阳东升的那一刻,人间皆是浪漫。新年新气象,到这些地方追逐一场海边的日出,幸运一整年!天津东丽万新街道新年新起步蓄势谋发展新春新起步,蓄势谋发展。兔年伊始,天津市东丽区万新街道不失时机地落实新一轮发展战略,寻求增长新方式,谋求发展新突破。节后第一天,万新街道组织多路小分队,深入重点骨干企业和项目工地,