Elementary OS 0.4.1 Loki配置vscode调试C程序

breakpoint_OK

折腾了老半天,总算搞定了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++支持。
  • c_c++
  • Code Runnder,来自Jun Han。必装插件,提供编译后程序的运行环境。
  • code_runner

从头总结配置C程序调试过程

「1」准备好文件夹和.c程序文件

  • 新建空文件夹,任意命名为「vscode_c_debug_conclusion」。
  • 文件夹
  • vscode中打开上述文件夹,然后在文件夹内新建一个hello.c文件。
  • hello.c

「2」配置debug调试条件

「2-1」配置调试环境之「launch.json」文件。
  • 点击侧边栏的「调试」图标,就是那只臭虫。然后点击上方的绿色三角右边的方框,在下拉菜单中选择「添加配置」。接着,在右边出现的小弹窗里,选择「C++(GDB/LLDB)」。
  • debug_set_1.png
  • vscode将在上述已打开的文件夹下自动生成一个隐藏文件夹「.vscode」和位于其中的一个文件「launch.json」。
  • debug_set_2
  • 文件「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」,
  • debug_set_3
  • 在出现的小弹窗/文本框中输入单词「task」,下方会实时出现搜索匹配项,滑动鼠标滚轮或向下拖动滚动条,找到「任务:配置任务」,点击选中它,
  • debug_set_4
  • 然后,点击选中「Others 运行任意外部命令的示例」,
  • 再点击选中出现的「使用模板创建 tasks.json 文件」,(下方图示为合并图片)。
  • debug_set_5.png
  • 跟前面的「launch.json」的创建情况一样,vscode这时在.vscode这个隐藏文件夹下自动创建了一个「tasks.json」文件,
  • debug_set_6
  • 这个「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"
  • debug_set_7
  • 接下来,再回到「launch.json」文件里,添加一句话,告诉vscode在执行它之前,还得先执行「tasks.json」里写的任务。
  • 在「launch.json」文件里增加这样一行,如果是增加在最后的话,记得给前面一行的末尾增加一个英文半角的逗号:
 "preLaunchTask":"builddebug"
//    如果在文件末尾添加这一行的话,这句最后不要有逗号,同时要在前面一句的后面增加一个逗号
//    把tasks.json里的label的名字拿过来用,这样才对得上。
  • debug_set_8
「2-3」配置调试环境之「launch.json」文件之二。

经过了上面的配置,其实已经可以调试了,只不过还有一点异常,那就是「断点不起作用」,那也就是仍然没法进入调试状态。

  • debug_set_9
  • debug_set_10

    后来,在「launch.json」文件里看到了这样一个设置:

"externalConsole":"true"
//    "externalConsole"代表「是否使用外部控制台来做调试」,true表示使用,false表示不使用。
//    之前vscode自动创建的这个launch.json里的默认值是true,然而似乎并没有设置什么用来调试的外部控制台啊!
//    把值改为false。
//    再按下F5键,启动调试——OK了。vscode右下部分的「终端」显示信息一开始和之前的一样,
//    大约2秒钟过后出现变化,同时可以看到断点起作用了。 

今天第一次配置的时候,跟着网上的不同的教程做了半天,一直卡在这一步,后来还是一句一句看究竟是什么意思,才摸索出来,累得是满头大汗!
初学者的痛苦,有谁能懂?

  • debug_set_11
  • 所以,最终的「launch.json」文件是这样的,
  • debug_set_12

「3」调整「Code Runnder」插件的设置

在「Code Runnder」这个「提供编译后程序的运行环境」的插件里,可以对一些设置进行调整,从而满足个人的编译习惯等。

注意:这个插件的选项是针对整个vscode的,和前面的位于当前打开文件夹下隐藏文件夹中的「launch.json」和「tasks.json」文件的作用范围是不一样的。

  • 依次点击上方菜单栏里的「文件」——「首选项」——「设置」,或者直接按下快捷键「Ctrl+,(逗号)」,打开设置界面,
  • coderunner_1
  • coderunner_2
  • 在设置搜索框里,输入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中编辑」的超链接,这样就打开了一个新文件标签「{ }用户设置」,
  • coderunner_3
  • 我这里只改了与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内部终端中运行代码
  • 不在vscode内部终端中运行代码.png
  • 我觉得还是「不在vscode内部终端中运行代码」的结果更美观!

  • 不过,这样的话在运行需要输入(比如有scanf等函数)时,就没法输入了。

  • 所以,还是把「在vscode内部终端运行代码」打上勾吧!(20190121新增以上2行。)

  • 其它几个「Code Runner」的选项设置,

  • coderunner_4.png
  • coderunner_5.png
  • 有些是默认设置,有些是改过了的,但是我现在已经想不起来哪些是改过了的,嘿嘿!

总结完毕,收工。

这样应该清楚多了吧!
今天上网查找教程的时候翻来覆去地出现了很多周折,具体的原因除了本人是新手、教程侧重点不同等等之外,还有一个大坑就是微软这个家伙多次更新vscode的时候,把「设置」本身的样式也给更新了很多,所以以前老版本的设置,在新版本里根本看不到、对不上!真是气啊!
一生气就想起了WM10,可怜当年大把银子入手的撸妹啊!唉,说起来都是泪!
好吧,就写这么多了,希望能对配置vscode调试c或c++的初学者有所帮助吧!共勉!

砚湖@飘香生活馆
二〇一九年一月十七日

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容