使用VSCode 和 Remote - WSL 插件,編輯 和 調試 C/C++代碼

背景信息:linux

  筆者第一次接觸C語言是在大一學校開設的C語言程序設計課上,使用教材是國內高校老師編著的。json

  Windows 系統,IDE 是 Microsoft Visual C++ 6.0,簡稱 VC6.0,是微軟於1998年推出的一款 C++ 編譯器。vim

  當時,沒學習過計算機科學導論,計算機組成原理,也不知道 Linux 爲什麼物。就這樣期末考了 80+windows

 

如今回爐重造!bash

  Windows 系統下使用 WSL 和 VSCode 調試 C/C++ 代碼,這是折中方案。編輯器

  WSL(Windows Subsystem for Linux)是一個在Windows 10上可以運行原生Linux二進制可執行文件(ELF格式)的兼容層。工具

  它是由Microsoft與Canonical公司合做開發,其目標是使純正的Ubuntu 14.04 "Trusty Tahr"映像能下載和解壓到用戶的本地計算機,而且映像內的工具和實用工具能在此子系統上原生運行。學習

 

必備知識:ui

Linux下gcc 編譯C語言
 
1.建立一個.C文件spa

vi/vim  hello.c

2.編譯 hello.c文件,生成可執行文件

gcc hello.c

 3.執行文件,在默認狀況下產生的可執行程序名爲 a.out

./a.out

 4.一般能夠經過 gcc 的「-o」選項來指定本身的可執行程序名稱。

gcc -o hi hello.c

  生成可執行程序名爲 hi

./hi

5.使用gcc的「-c」標記來編譯支持庫代碼(對多個文件進行編譯)

gcc -c hello.c

 輸出結果爲一個名爲 hello.o 的文件
 


 

Windows 10下安裝WSL官方教程:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

編輯器有兩種方案:

  1. Vim 或 Emacs
  2. Visual Studio Code:https://code.visualstudio.com/

接下來在 VSCode 安裝必備插件:

  1. Remote - WSL
  2. C/C++

注意:點擊 VSCode 左下角的 WSL:Ubuntu,選擇 Remote-WSL:Reopen Folder in WSL

 

使用 VSCode 編輯代碼 與遠程鏈接WSL:Ubuntu,在 Linux 下 gcc 編譯 和 gdb 調試

至於爲何,不在 VSCode 上一站式解決編輯、編譯、調試?

每次編譯都會生成同名文件文件,索性使用 gcc 命令行默認生成 a.out

 

 

 

 坑1:VSCode 是用來編輯代碼,必定要保持在遠程鏈接狀態。

理清思路,不要在本地新建文件夾保存代碼,要徹底按照 Linux 操做習慣

$ mkdir chapter_03  

 

 

確保 gcc 和 gdb 安裝成功

~$ whereis gcc
gcc: /usr/bin/gcc~$ whereis gdb
gdb: /usr/bin/gdb 

 

 

下面是第一次使用 VSCode 中 C/C++ 編譯插件須要配置的文件,launch.json

"version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 啓動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/chapter_03/a.out",  // 此處是坑2,由於忘記加 chapter_03
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",  
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "爲 gdb 啓用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        {
            "name": "gcc - 生成和調試活動文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",  
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "爲 gdb 啓用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "gcc build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]

 

 坑3,使用 VSCode 編輯,在終端 gcc 編譯,報錯

$ cd chapter_03
$ ls
frist.c
$ gcc frist.c /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start': (.text+0x24): undefined reference to `main' collect2: error: ld returned 1 exit status

 

 源文件以下:

#include<stdio.h>

int main(void){
    printf("test gcc...");
    return 0;
}

 

解決方案:

$ gcc -Wall -g -c frist.c 
$ gcc -Wall -g frist.o -o frist
$ ./frist 
test gcc...

 

 

進一步學習 gcc 參數

gcc 是 GNU 的 c 編譯器,gcc 在執行編譯工做的時候,總共須要4步:

  1. 預處理,生成 .i 的文件                                           [預處理器cpp]
  2. 將預處理後的文件轉換成彙編語言, 生成文件 .s  [編譯器egcs]
  3. 有彙編變爲目標代碼(機器代碼) 生成 .o 的文件   [彙編器as]
  4. 鏈接目標代碼, 生成可執行程序                           [連接器ld]

 

-g  // 只是編譯器,在編譯的時候,產生調試信息。

 

-c  // 只激活預處理,編譯,和彙編,也就是隻把程序作成obj文件

 

 

 

受此啓發:https://blog.csdn.net/Hyz8970/article/details/101627753

相關文章
相關標籤/搜索