Elementary OS 0.4.1 Loki配置vscode調(diào)試C程序

breakpoint_OK

折騰了老半天,總算搞定了vscode調(diào)試C代碼。

系統(tǒng)信息:

  • elementary OS 0.4.1 Loki (64-bit)
  • 基于 "Ubuntu 16.04.5 LTS" 構(gòu)建
  • 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 內(nèi)存
  • 121.2 GB 硬盤

vscode以及相關(guān)插件

  • Visual Studio Code for Linux,版本: 1.30.2
  • C/C++,來自Microsoft。必裝插件,提供C/C++支持。
  • c_c++
  • Code Runnder,來自Jun Han。必裝插件,提供編譯后程序的運行環(huán)境。
  • code_runner

從頭總結(jié)配置C程序調(diào)試過程

「1」準備好文件夾和.c程序文件

  • 新建空文件夾,任意命名為「vscode_c_debug_conclusion」。
  • 文件夾
  • vscode中打開上述文件夾,然后在文件夾內(nèi)新建一個hello.c文件。
  • hello.c

「2」配置debug調(diào)試條件

「2-1」配置調(diào)試環(huán)境之「launch.json」文件。
  • 點擊側(cè)邊欄的「調(diào)試」圖標(biāo),就是那只臭蟲。然后點擊上方的綠色三角右邊的方框,在下拉菜單中選擇「添加配置」。接著,在右邊出現(xiàn)的小彈窗里,選擇「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",
//    這句話表示,要被調(diào)試的文件是冒號右邊的文件
//    ${workspaceFolder}是工作空間文件夾,在這里就是上面打開的「vscode_c_debug_conclusion」文件夾的絕對地址。
//    out_bin是按個人喜好在當(dāng)前工作空間文件夾下建立的名字為out_bin的空文件夾,用來存放輸出來的調(diào)試文件
//    ${fileBasenameNoExtension}是當(dāng)前打開文件的去除了后綴名的文件名稱
//    .debug是按個人喜好設(shè)置的輸出來的調(diào)試文件的后綴名
「2-2」配置調(diào)試環(huán)境之「tasks.json」文件。
  • 點擊菜單欄的「查看」——「命令面板」,或者直接按快捷鍵「Ctrl+Shift+P」,
  • debug_set_3
  • 在出現(xiàn)的小彈窗/文本框中輸入單詞「task」,下方會實時出現(xiàn)搜索匹配項,滑動鼠標(biāo)滾輪或向下拖動滾動條,找到「任務(wù):配置任務(wù)」,點擊選中它,
  • debug_set_4
  • 然后,點擊選中「Others 運行任意外部命令的示例」,
  • 再點擊選中出現(xiàn)的「使用模板創(chuàng)建 tasks.json 文件」,(下方圖示為合并圖片)。
  • debug_set_5.png
  • 跟前面的「launch.json」的創(chuàng)建情況一樣,vscode這時在.vscode這個隱藏文件夾下自動創(chuàng)建了一個「tasks.json」文件,
  • debug_set_6
  • 這個「tasks.json」文件的作用是,在「launch.json」調(diào)用被調(diào)試的文件之前,把被調(diào)試的文件給準備好。
"label":"echo"    //    "label"是一個屬性,vscode的解釋是「任務(wù)的用戶界面標(biāo)簽」,
//    說得直白一點"label"代表的是,這個「任務(wù)/tasks」的名字。默認的名字是「echo」。
//    根據(jù)個人喜歡,我這里把值改成了"builddebug"。
  • 前面已經(jīng)在「launch.json」里把被調(diào)試的文件的名字過了,這里肯定也要一樣才行。
"command":"echo Hello"    //    "command"代表「要執(zhí)行的命令。可以是外部程序或shell命令。」
//    我們要改成把打開的c程序文件編譯為可執(zhí)行文件,并且要可調(diào)試,
//    所以把值"echo Hello"改為我們需要的"gcc -g ${file} -o out_bin/${fileBasenameNoExtension}.debug"
  • debug_set_7
  • 接下來,再回到「launch.json」文件里,添加一句話,告訴vscode在執(zhí)行它之前,還得先執(zhí)行「tasks.json」里寫的任務(wù)。
  • 在「launch.json」文件里增加這樣一行,如果是增加在最后的話,記得給前面一行的末尾增加一個英文半角的逗號:
 "preLaunchTask":"builddebug"
//    如果在文件末尾添加這一行的話,這句最后不要有逗號,同時要在前面一句的后面增加一個逗號
//    把tasks.json里的label的名字拿過來用,這樣才對得上。
  • debug_set_8
「2-3」配置調(diào)試環(huán)境之「launch.json」文件之二。

經(jīng)過了上面的配置,其實已經(jīng)可以調(diào)試了,只不過還有一點異常,那就是「斷點不起作用」,那也就是仍然沒法進入調(diào)試狀態(tài)。

  • debug_set_9
  • debug_set_10

    后來,在「launch.json」文件里看到了這樣一個設(shè)置:

"externalConsole":"true"
//    "externalConsole"代表「是否使用外部控制臺來做調(diào)試」,true表示使用,false表示不使用。
//    之前vscode自動創(chuàng)建的這個launch.json里的默認值是true,然而似乎并沒有設(shè)置什么用來調(diào)試的外部控制臺啊!
//    把值改為false。
//    再按下F5鍵,啟動調(diào)試——OK了。vscode右下部分的「終端」顯示信息一開始和之前的一樣,
//    大約2秒鐘過后出現(xiàn)變化,同時可以看到斷點起作用了。 

今天第一次配置的時候,跟著網(wǎng)上的不同的教程做了半天,一直卡在這一步,后來還是一句一句看究竟是什么意思,才摸索出來,累得是滿頭大汗!
初學(xué)者的痛苦,有誰能懂?

  • debug_set_11
  • 所以,最終的「launch.json」文件是這樣的,
  • debug_set_12

「3」調(diào)整「Code Runnder」插件的設(shè)置

在「Code Runnder」這個「提供編譯后程序的運行環(huán)境」的插件里,可以對一些設(shè)置進行調(diào)整,從而滿足個人的編譯習(xí)慣等。

注意:這個插件的選項是針對整個vscode的,和前面的位于當(dāng)前打開文件夾下隱藏文件夾中的「launch.json」和「tasks.json」文件的作用范圍是不一樣的。

  • 依次點擊上方菜單欄里的「文件」——「首選項」——「設(shè)置」,或者直接按下快捷鍵「Ctrl+,(逗號)」,打開設(shè)置界面,
  • coderunner_1
  • coderunner_2
  • 在設(shè)置搜索框里,輸入code runner或coderunner,有沒有空格都行,vscode自動就匹配到Code Runner插件的結(jié)果了。點擊一下那個「Run Code confi...(20)」,在它的右邊顯示的就全都是Code Runner插件的設(shè)置選項了。
「3-1」調(diào)整「Code-runner:Executor Map」的設(shè)置
  • 其中的「Code-runner:Executor Map」選項,可以改變編譯出來的可執(zhí)行文件的名稱、存放位置、編譯完成后調(diào)用系統(tǒng)自帶終端來運行等等設(shè)置,我這里只對「直接編譯出來的可執(zhí)行文件的名稱以及存放位置」進行調(diào)整。
  • 根據(jù)指示,單擊「Code-runner:Executor Map」這行文字下面的「在settings.json中編輯」的超鏈接,這樣就打開了一個新文件標(biāo)簽「{ }用戶設(shè)置」,
  • coderunner_3
  • 我這里只改了與C有關(guān)的設(shè)置,其它語言的設(shè)置要不要拷貝到右邊「用戶設(shè)置」里,我因為現(xiàn)在也用不上,就沒有測試。
  • 把左邊只讀文件「默認用戶設(shè)置」中的
"code-runner.executorMap"{
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
}
//    因為這個設(shè)置在這里是唯一一個,所以它的大括號最后沒有英文半角逗號

復(fù)制到右邊的第一個位置的「用戶設(shè)置」里,并改為如下內(nèi)容:

"code-runner.executorMap": {
    "c":"cd $dir && gcc $fileName -o $dir/out_bin/$fileNameWithoutExt.out && $dir/out_bin/$fileNameWithoutExt.out",
    },
//    因為這里的用戶自定義設(shè)置有很多項,這一項也不是最后一項,所以大括號后面要跟一個英文半角逗號,否則會提示有錯誤。
//    這個選項表示的是通過Code Runner這個插件編譯源文件的得到可執(zhí)行文件的具體過程,
//    具體的就不一一解釋了,我改的只是最后編譯出來的可執(zhí)行文件的名字,和它存放的位置,
//    這個主要是看個人喜好吧。
//    另外,在網(wǎng)上看到的教程里有調(diào)用系統(tǒng)自帶終端來運行編譯出來的可執(zhí)行文件的,但是我沒有嘗試成功,就暫時放下了。
  • 設(shè)置完成后,關(guān)閉「{ }用戶設(shè)置」標(biāo)簽即可,設(shè)置已經(jīng)被vscode實時保存了。
「3-2」調(diào)整「Code Runner」插件的其它設(shè)置
  • 「Code-runner:Run In Terminal」,是否在vscode內(nèi)部終端中運行代碼,

  • 在vscode內(nèi)部終端中運行代碼
  • 不在vscode內(nèi)部終端中運行代碼.png
  • 我覺得還是「不在vscode內(nèi)部終端中運行代碼」的結(jié)果更美觀!

  • 不過,這樣的話在運行需要輸入(比如有scanf等函數(shù))時,就沒法輸入了。

  • 所以,還是把「在vscode內(nèi)部終端運行代碼」打上勾吧!(20190121新增以上2行。)

  • 其它幾個「Code Runner」的選項設(shè)置,

  • coderunner_4.png
  • coderunner_5.png
  • 有些是默認設(shè)置,有些是改過了的,但是我現(xiàn)在已經(jīng)想不起來哪些是改過了的,嘿嘿!

總結(jié)完畢,收工。

這樣應(yīng)該清楚多了吧!
今天上網(wǎng)查找教程的時候翻來覆去地出現(xiàn)了很多周折,具體的原因除了本人是新手、教程側(cè)重點不同等等之外,還有一個大坑就是微軟這個家伙多次更新vscode的時候,把「設(shè)置」本身的樣式也給更新了很多,所以以前老版本的設(shè)置,在新版本里根本看不到、對不上!真是氣啊!
一生氣就想起了WM10,可憐當(dāng)年大把銀子入手的擼妹啊!唉,說起來都是淚!
好吧,就寫這么多了,希望能對配置vscode調(diào)試c或c++的初學(xué)者有所幫助吧!共勉!

硯湖@飄香生活館
二〇一九年一月十七日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容