折腾了老半天,总算搞定了vscode调试C代码。
系统信息:
- elementary OS 0.4.1 Loki (64-bit)
- 基于 "Ubuntu 16.04.5 LTS" 构建
- Linux 4.15.0-43-generic
- GTK+ 版本:3.18.9
配置信息:
- 双核 Intel® Core™ i3-4005U CPU @ 1.70GHz
- Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
- 4.0 GB 内存
- 121.2 GB 硬盘
vscode以及相关插件
- Visual Studio Code for Linux,版本: 1.30.2
- C/C++,来自Microsoft。必装插件,提供C/C++支持。
- Code Runnder,来自Jun Han。必装插件,提供编译后程序的运行环境。
从头总结配置C程序调试过程
「1」准备好文件夹和.c程序文件
- 新建空文件夹,任意命名为「vscode_c_debug_conclusion」。
- vscode中打开上述文件夹,然后在文件夹内新建一个hello.c文件。
「2」配置debug调试条件
「2-1」配置调试环境之「launch.json」文件。
- 点击侧边栏的「调试」图标,就是那只臭虫。然后点击上方的绿色三角右边的方框,在下拉菜单中选择「添加配置」。接着,在右边出现的小弹窗里,选择「C++(GDB/LLDB)」。
- vscode将在上述已打开的文件夹下自动生成一个隐藏文件夹「.vscode」和位于其中的一个文件「launch.json」。
- 文件「launch.json」中的这句
"program":"enter program name, for example ${workspaceFolder}/a.out",
需要修改,我改成了下面这样:
"program": "${workspaceFolder}/out_bin/${fileBasenameNoExtension}.debug",
// 这句话表示,要被调试的文件是冒号右边的文件
// ${workspaceFolder}是工作空间文件夹,在这里就是上面打开的「vscode_c_debug_conclusion」文件夹的绝对地址。
// out_bin是按个人喜好在当前工作空间文件夹下建立的名字为out_bin的空文件夹,用来存放输出来的调试文件
// ${fileBasenameNoExtension}是当前打开文件的去除了后缀名的文件名称
// .debug是按个人喜好设置的输出来的调试文件的后缀名
「2-2」配置调试环境之「tasks.json」文件。
- 点击菜单栏的「查看」——「命令面板」,或者直接按快捷键「Ctrl+Shift+P」,
- 在出现的小弹窗/文本框中输入单词「task」,下方会实时出现搜索匹配项,滑动鼠标滚轮或向下拖动滚动条,找到「任务:配置任务」,点击选中它,
- 然后,点击选中「Others 运行任意外部命令的示例」,
- 再点击选中出现的「使用模板创建 tasks.json 文件」,(下方图示为合并图片)。
- 跟前面的「launch.json」的创建情况一样,vscode这时在.vscode这个隐藏文件夹下自动创建了一个「tasks.json」文件,
- 这个「tasks.json」文件的作用是,在「launch.json」调用被调试的文件之前,把被调试的文件给准备好。
"label":"echo" // "label"是一个属性,vscode的解释是「任务的用户界面标签」,
// 说得直白一点"label"代表的是,这个「任务/tasks」的名字。默认的名字是「echo」。
// 根据个人喜欢,我这里把值改成了"builddebug"。
- 前面已经在「launch.json」里把被调试的文件的名字过了,这里肯定也要一样才行。
"command":"echo Hello" // "command"代表「要执行的命令。可以是外部程序或shell命令。」
// 我们要改成把打开的c程序文件编译为可执行文件,并且要可调试,
// 所以把值"echo Hello"改为我们需要的"gcc -g ${file} -o out_bin/${fileBasenameNoExtension}.debug"
- 接下来,再回到「launch.json」文件里,添加一句话,告诉vscode在执行它之前,还得先执行「tasks.json」里写的任务。
- 在「launch.json」文件里增加这样一行,如果是增加在最后的话,记得给前面一行的末尾增加一个英文半角的逗号:
"preLaunchTask":"builddebug"
// 如果在文件末尾添加这一行的话,这句最后不要有逗号,同时要在前面一句的后面增加一个逗号
// 把tasks.json里的label的名字拿过来用,这样才对得上。
「2-3」配置调试环境之「launch.json」文件之二。
经过了上面的配置,其实已经可以调试了,只不过还有一点异常,那就是「断点不起作用」,那也就是仍然没法进入调试状态。
-
后来,在「launch.json」文件里看到了这样一个设置:
"externalConsole":"true"
// "externalConsole"代表「是否使用外部控制台来做调试」,true表示使用,false表示不使用。
// 之前vscode自动创建的这个launch.json里的默认值是true,然而似乎并没有设置什么用来调试的外部控制台啊!
// 把值改为false。
// 再按下F5键,启动调试——OK了。vscode右下部分的「终端」显示信息一开始和之前的一样,
// 大约2秒钟过后出现变化,同时可以看到断点起作用了。
今天第一次配置的时候,跟着网上的不同的教程做了半天,一直卡在这一步,后来还是一句一句看究竟是什么意思,才摸索出来,累得是满头大汗!
初学者的痛苦,有谁能懂?
- 所以,最终的「launch.json」文件是这样的,
「3」调整「Code Runnder」插件的设置
在「Code Runnder」这个「提供编译后程序的运行环境」的插件里,可以对一些设置进行调整,从而满足个人的编译习惯等。
注意:这个插件的选项是针对整个vscode的,和前面的位于当前打开文件夹下隐藏文件夹中的「launch.json」和「tasks.json」文件的作用范围是不一样的。
- 依次点击上方菜单栏里的「文件」——「首选项」——「设置」,或者直接按下快捷键「Ctrl+,(逗号)」,打开设置界面,
- 在设置搜索框里,输入code runner或coderunner,有没有空格都行,vscode自动就匹配到Code Runner插件的结果了。点击一下那个「Run Code confi...(20)」,在它的右边显示的就全都是Code Runner插件的设置选项了。
「3-1」调整「Code-runner:Executor Map」的设置
- 其中的「Code-runner:Executor Map」选项,可以改变编译出来的可执行文件的名称、存放位置、编译完成后调用系统自带终端来运行等等设置,我这里只对「直接编译出来的可执行文件的名称以及存放位置」进行调整。
- 根据指示,单击「Code-runner:Executor Map」这行文字下面的「在settings.json中编辑」的超链接,这样就打开了一个新文件标签「{ }用户设置」,
- 我这里只改了与C有关的设置,其它语言的设置要不要拷贝到右边「用户设置」里,我因为现在也用不上,就没有测试。
- 把左边只读文件「默认用户设置」中的
"code-runner.executorMap"{
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
}
// 因为这个设置在这里是唯一一个,所以它的大括号最后没有英文半角逗号
复制到右边的第一个位置的「用户设置」里,并改为如下内容:
"code-runner.executorMap": {
"c":"cd $dir && gcc $fileName -o $dir/out_bin/$fileNameWithoutExt.out && $dir/out_bin/$fileNameWithoutExt.out",
},
// 因为这里的用户自定义设置有很多项,这一项也不是最后一项,所以大括号后面要跟一个英文半角逗号,否则会提示有错误。
// 这个选项表示的是通过Code Runner这个插件编译源文件的得到可执行文件的具体过程,
// 具体的就不一一解释了,我改的只是最后编译出来的可执行文件的名字,和它存放的位置,
// 这个主要是看个人喜好吧。
// 另外,在网上看到的教程里有调用系统自带终端来运行编译出来的可执行文件的,但是我没有尝试成功,就暂时放下了。
- 设置完成后,关闭「{ }用户设置」标签即可,设置已经被vscode实时保存了。
「3-2」调整「Code Runner」插件的其它设置
「Code-runner:Run In Terminal」,是否在vscode内部终端中运行代码,
我觉得还是「不在vscode内部终端中运行代码」的结果更美观!
不过,这样的话在运行需要输入(比如有scanf等函数)时,就没法输入了。
所以,还是把「在vscode内部终端运行代码」打上勾吧!(20190121新增以上2行。)
其它几个「Code Runner」的选项设置,
有些是默认设置,有些是改过了的,但是我现在已经想不起来哪些是改过了的,嘿嘿!
总结完毕,收工。
这样应该清楚多了吧!
今天上网查找教程的时候翻来覆去地出现了很多周折,具体的原因除了本人是新手、教程侧重点不同等等之外,还有一个大坑就是微软这个家伙多次更新vscode的时候,把「设置」本身的样式也给更新了很多,所以以前老版本的设置,在新版本里根本看不到、对不上!真是气啊!
一生气就想起了WM10,可怜当年大把银子入手的撸妹啊!唉,说起来都是泪!
好吧,就写这么多了,希望能对配置vscode调试c或c++的初学者有所帮助吧!共勉!
砚湖@飘香生活馆
二〇一九年一月十七日