Trong bài viết này, chúng ta sẽ tìm hiểu cách cấu hình Visual Studio Code để sử dụng trình biên dịch và gỡ lỗi Microsoft c+ + trên Windows. Sau khi cấu hình VS Code, bạn sẽ biên dịch và gỡ lỗi một chương trình Hello World đơn giản trong VS Code. Hướng dẫn này không dạy bạn về các chi tiết về bộ công cụ Microsoft C++ hoặc ngôn ngữ C++. Vì vậy, nếu bạn muốn tìm hiểu về các chủ đề này, hãy tìm kiếm các nguồn tài nguyên tốt trên Web.
Yêu cầu tiên quyết
Để hoàn thành hướng dẫn này, bạn cần thực hiện các bước sau:
- Cài đặt Visual Studio Code.
- Cài đặt tiện ích C/C++ cho VS Code. Bạn có thể cài đặt tiện ích C/C++ bằng cách tìm kiếm 'c++' trong chế độ xem Tiện ích (⇧⌘X (Windows, Linux Ctrl+Shift+X)).
- Cài đặt bộ công cụ biên dịch Microsoft Visual C++ (MSVC).
- Nếu bạn đã cài đặt phiên bản mới nhất của Visual Studio, hãy mở Trình cài đặt Visual Studio từ menu Start của Windows và xác minh rằng khối công việc C++ đã được chọn. Nếu nó chưa được cài đặt, hãy chọn hộp kiểm và chọn nút "Sửa đổi" trong trình cài đặt.
- Bạn cũng có thể cài đặt khối công việc "Phát triển máy tính để bàn với C++" mà không cần cài đặt đầy đủ IDE Visual Studio. Từ trang Tải xuống Visual Studio, cuộn xuống cho đến khi bạn thấy "Công cụ cho Visual Studio" dưới mục "Tất cả các tệp tin" và chọn phiên bản tải xuống "Công cụ xây dựng cho Visual Studio 2022".
- Việc này sẽ khởi chạy Trình cài đặt Visual Studio, hiển thị hộp thoại hiển thị các khối công việc Visual Studio Build Tools có sẵn. Chọn khối công việc "Phát triển máy tính để bàn với C++" và chọn "Cài đặt".
Lưu ý: Bạn có thể sử dụng bộ công cụ C++ từ Visual Studio Build Tools cùng với Visual Studio Code để biên dịch, xây dựng và xác minh bất kỳ mã nguồn C++ nào miễn là bạn cũng có một giấy phép hợp lệ của Visual Studio (Community, Pro hoặc Enterprise) mà bạn đang sử dụng để phát triển mã nguồn C++ đó.
Kiểm tra cài đặt Microsoft Visual C++
Để sử dụng MSVC từ dòng lệnh hoặc trong VS Code, bạn phải chạy từ một "Lệnh Command Prompt cho Visual Studio". Một shell thông thường như PowerShell, Bash hoặc command prompt trên Windows không có các biến môi trường đường dẫn cần thiết.
Để mở Command Prompt cho VS, hãy bắt đầu gõ "developer" trong Menu Start của Windows. Bạn sẽ thấy nó xuất hiện trong danh sách gợi ý. Tên cụ thể phụ thuộc vào phiên bản Visual Studio hoặc Visual Studio Build Tools bạn đã cài đặt. Chọn mục đó để mở lời gọi lệnh.
Bạn có thể kiểm tra xem bạn đã cài đặt chính xác trình biên dịch C++, cl.exe
, bằng cách gõ 'cl' và bạn nên thấy một thông báo bản quyền với phiên bản và mô tả cơ bản về cách sử dụng.
Nếu Lệnh Command Prompt cho nhà phát triển sử dụng vị trí BuildTools là thư mục bắt đầu (bạn không muốn đặt dự án ở đó), hãy di chuyển đến thư mục người dùng của bạn (C:users{tên người dùng của bạn}
) trước khi bạn bắt đầu tạo dự án mới.
Lưu ý: Nếu vì một lý do nào đó bạn không thể chạy VS Code từ một Lệnh Command Prompt cho nhà phát triển, bạn có thể tìm một cách khắc phục để xây dựng các dự án C++ với VS Code trong Run VS Code outside a Developer Command Prompt.
Tạo chương trình Hello World
Từ Command Prompt cho nhà phát triển, hãy tạo một thư mục trống có tên "projects" để bạn có thể lưu trữ tất cả các dự án VS Code của mình. Sau đó, tạo một thư mục con có tên là "helloworld", di chuyển vào thư mục đó và mở VS Code (bằng cách gõ code .
) trong thư mục đó (.
) bằng cách nhập các lệnh sau:
mkdir projects cd projects mkdir helloworld cd helloworld code .
Lệnh code .
sẽ mở VS Code trong thư mục làm việc hiện tại, đó sẽ trở thành "không gian làm việc" của bạn. Khi bạn theo hướng dẫn, bạn sẽ thấy ba tệp được tạo trong một thư mục .vscode trong không gian làm việc của bạn:
- tasks.json (hướng dẫn xây dựng)
- launch.json (cài đặt gỡ rối)
- c_cpp_properties.json (đường dẫn trình biên dịch và cài đặt IntelliSense)
Thêm một tệp mã nguồn
Trên thanh tiêu đề Trình duyệt tệp, chọn nút New File và đặt tên tệp là helloworld.cpp
.
Sau đó, dán đoạn mã nguồn này vào tệp:
#include #include #include using namespace std; int main() { vector msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"}; for (const string& word : msg) { cout << word << " "; } cout << endl; }
Tiếp theo, nhấn ⌘S (Windows, Linux Ctrl+S) để lưu tệp. Lưu ý là tệp bạn vừa thêm sẽ xuất hiện trong chế độ xem File (⇧⌘E (Windows, Linux Ctrl+Shift+E)) trong thanh bên của VS Code.
Bạn cũng có thể bật Lưu tự động để tự động lưu các thay đổi trong tệp của bạn bằng cách chọn Auto Save trong menu File chính.
Thanh hoạt động ở phía bên trái cho phép bạn mở các chế độ xem khác nhau như Search, Source Control và Run. Bạn sẽ xem xét chế độ xem Run sau trong hướng dẫn này. Bạn có thể tìm hiểu thêm về các chế độ xem khác trong tài liệu Giao diện người dùng VS Code.
Lưu ý: Khi bạn lưu hoặc mở tệp C++, bạn có thể nhìn thấy thông báo từ tiện ích C/C++ về sự có sẵn của một phiên bản Insiders, cho phép bạn thử nghiệm các tính năng và sửa lỗi mới. Bạn có thể bỏ qua thông báo này bằng cách chọn X (Clear Notification).
Khám phá IntelliSense
Trong tệp helloworld.cpp mới của bạn, di chuột qua vector hoặc string để xem thông tin về kiểu dữ liệu. Sau khi khai báo biến msg, bắt đầu gõ msg.
như bạn thường làm khi gọi một hàm thành viên. Bạn sẽ ngay lập tức thấy một danh sách hoàn thành xuất hiện hiển thị tất cả các hàm thành viên và một cửa sổ hiển thị thông tin về kiểu dữ liệu của đối tượng msg:
Bạn có thể nhấn phím Tab để chèn hàm thành viên đã chọn. Khi bạn thêm dấu ngoặc mở, bạn sẽ thấy thông tin về bất kỳ đối số nào mà hàm đó yêu cầu.
Chạy helloworld.cpp
Hãy nhớ rằng tiện ích C++ sử dụng trình biên dịch C++ bạn đã cài đặt trên máy tính của bạn để xây dựng chương trình của bạn. Hãy đảm bảo rằng bạn đã cài đặt trình biên dịch C++ trước khi thử chạy và gỡ lỗi helloworld.cpp trong VS Code.
- Mở tệp helloworld.cpp để nó trở thành tệp đang hoạt động.
- Nhấn nút chạy ở góc trên bên phải của trình soạn thảo.
- Chọn C/C++: cl.exe build and debug active file từ danh sách trình biên dịch được phát hiện trên hệ thống của bạn.
Bạn sẽ chỉ được hỏi để chọn một trình biên dịch lần đầu tiên bạn chạy helloworld.cpp. Trình biên dịch này sẽ được đặt là trình biên dịch "mặc định" trong tệp tasks.json.
- Sau khi xây dựng thành công, đầu ra của chương trình sẽ xuất hiện trong Terminal tích hợp.
Nếu bạn gặp lỗi khi cố gắng xây dựng và gỡ lỗi với cl.exe, hãy đảm bảo rằng bạn đã bắt đầu VS Code từ Lệnh Command Prompt cho Visual Studio bằng cách sử dụng phím tắt code .
.
Lần đầu tiên bạn chạy chương trình của mình, tiện ích C++ sẽ tạo ra tệp tasks.json, nơi bạn sẽ tìm thấy trong thư mục .vscode của dự án của bạn. tasks.json lưu trữ cấu hình xây dựng.
Tệp tasks.json mới của bạn nên có dạng tương tự như JSON dưới đây:
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "C/C++: cl.exe build active file", "command": "cl.exe", "args": ["/Zi", "/EHsc", "/Fe:", "${fileDirname}\\${fileBasenameNoExtension}.exe", "${file}"], "problemMatcher": ["$msCompile"], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ] }
Lưu ý: Bạn có thể tìm hiểu thêm về các biến tasks.json trong tài liệu tham khảo biến.
Thiết lập lệnh chỉ định chương trình mà bạn muốn chạy; trong trường hợp này, đó là "cl.exe". Mảng args chỉ định các đối số dòng lệnh sẽ được truyền vào cl.exe. Các đối số này phải được chỉ định theo thứ tự mà trình biên dịch mong đợi.
Tác vụ này nói với trình biên dịch C++ để lấy tệp đang hoạt động (${file}), biên dịch nó và tạo một tệp thực thi (/Fe: switch) trong thư mục hiện tại (${fileDirname}) với cùng tên như tệp đang hoạt động nhưng với phần mở rộng .exe (${fileBasenameNoExtension}.exe), kết quả là helloworld.exe cho ví dụ của chúng tôi.
Giá trị nhãn là những gì bạn sẽ thấy trong danh sách các tác vụ; bạn có thể đặt tên này theo ý thích của bạn.
Giá trị detail là mô tả công việc trong danh sách các tác vụ. Đề nghị đổi tên giá trị này để phân biệt nó với các tác vụ tương tự.
Giá trị problemMatcher chọn bộ phân tích cú pháp đầu ra để tìm lỗi và cảnh báo trong đầu ra trình biên dịch. Đối với cl.exe, bạn sẽ nhận được kết quả tốt nhất nếu bạn sử dụng bộ phân tích cú pháp $msCompile.
Từ nay trở đi, nút chạy sẽ đọc từ tasks.json để xác định cách xây dựng và chạy chương trình của bạn. Bạn có thể định nghĩa nhiều tác vụ xây dựng trong tasks.json và bất kỳ tác vụ nào được đánh dấu là mặc định sẽ được sử dụng bởi nút chạy. Trong trường hợp bạn cần thay đổi trình biên dịch mặc định, bạn có thể chạy Tasks: Configure default build task. Hoặc bạn có thể sửa đổi tệp tasks.json và loại bỏ mặc định bằng cách thay thế đoạn sau:
"group": { "kind": "build", "isDefault": true },
bằng đoạn sau:
"group": "build",
Sửa đổi tasks.json
Bạn có thể sửa đổi tasks.json của mình để xây dựng nhiều tệp C++ bằng cách sử dụng đối số như "${workspaceFolder}/*.cpp" thay vì "${file}". Điều này sẽ xây dựng tất cả các tệp .cpp trong thư mục hiện tại của bạn. Bạn cũng có thể sửa đổi tên tệp đầu ra bằng cách thay thế "${fileDirname}\${fileBasenameNoExtension}.exe" bằng một tên tệp cố định (ví dụ: "${workspaceFolder}\myProgram.exe").
Gỡ rối helloworld.cpp
Để gỡ rối mã của bạn:
- Quay lại tệp helloworld.cpp để nó trở thành tệp đang hoạt động.
- Đặt một điểm dừng bằng cách nhấp vào lề trình soạn thảo hoặc sử dụng F9 trên dòng hiện tại.
- Từ danh sách thả xuống bên cạnh nút chạy, chọn Debug C/C++ File.
- Chọn C/C++: cl.exe build and debug active file từ danh sách các trình biên dịch được phát hiện trên hệ thống của bạn (bạn chỉ được hỏi để chọn một trình biên dịch lần đầu tiên bạn chạy hoặc gỡ lỗi helloworld.cpp).
Nút chạy có hai chế độ: Run C/C++ File và Debug C/C++ File. Nó sẽ mặc định thành chế độ được sử dụng cuối cùng. Nếu bạn thấy biểu tượng gỡ lỗi trong nút chạy, bạn có thể chọn nút chạy để gỡ lỗi, thay vì chọn mục trong menu thả xuống.
Nếu bạn gặp lỗi khi xây dựng và gỡ lỗi bằng cl.exe, hãy đảm bảo rằng bạn đã bắt đầu VS Code từ Lệnh Command Prompt cho Visual Studio bằng phím tắt code .
.
Lần đầu tiên bạn chạy chương trình của mình, tiện ích C++ sẽ tạo ra tệp launch.json, mà bạn sẽ tìm thấy trong thư mục .vscode của dự án của bạn. launch.json quản lý cấu hình gỡ rối.
Launch.json được tạo ở vị trí bạn đang làm việc với một tệp hợp lệ có nội dung tương tự như này:
{ "version": "0.2.0", "configurations": [ { "name": "C/C++: cl.exe build and debug active file", "type": "cppvsdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "preLaunchTask": "C/C++: cl.exe build active file" } ] }
Lưu ý: Bạn có thể tìm hiểu thêm về các tùy chọn cấu hình gỡ rối trong tệp launch.json trong tài liệu tham khảo.
Trong JSON trên, program
chỉ định chương trình bạn muốn gỡ rối. Ở đây, nó được đặt thành thư mục tệp đang hoạt động (${fileDirname}) và tên tệp được kích hoạt với phần mở rộng .exe (${fileBasenameNoExtension}.exe), mà nếu helloworld.cpp
là tệp đang hoạt động sẽ là helloworld.exe
. Thuộc tính args
là một mảng chứa các đối số để truyền cho chương trình trong quá trình chạy.
Mặc định, tiện ích C++ sẽ không thêm bất kỳ điểm dừng nào vào mã nguồn của bạn và giá trị stopAtEntry
được đặt thành false.
Thay đổi giá trị stopAtEntry
thành true để khiến trình gỡ lỗi dừng ở phương thức main khi bạn bắt đầu gỡ rối.
Kể từ bây giờ, nút chạy và F5 sẽ đọc từ tệp launch.json của bạn khi khởi chạy chương trình của bạn cho mục đích gỡ rối.
Tùy chỉnh gỡ rối bằng launch.json
Khi bạn gỡ rối bằng nút chạy hoặc F5, tiện ích C++ tạo ra một cấu hình gỡ rối động ngay lập tức.
Có những trường hợp bạn muốn tùy chỉnh cấu hình gỡ rối của mình, chẳng hạn như chỉ định các đối số để truyền cho chương trình trong quá trình chạy. Bạn có thể định nghĩa các cấu hình gỡ rối tùy chỉnh trong tệp launch.json.
Để tạo tệp launch.json, hãy chọn Add Debug Configuration từ menu thả xuống của nút chạy.
Sau đó, bạn sẽ thấy một menu thả xuống cho các cấu hình gỡ rối đã định nghĩa sẵn. Hãy chọn C/C++: cl.exe build and debug active file.
VS Code sẽ tạo ra một tệp launch.json, nơi bạn sẽ tìm thấy trong thư mục .vscode. launch.json lưu trữ cấu hình gỡ rối của bạn.
Bạn có thể chỉ định chương trình bạn muốn gỡ rối bằng thuộc tính program
. Ở đây, nó được đặt thành thư mục tệp đang hoạt động (${fileDirname}) và tên tệp hoạt động với phần mở rộng .exe (${fileBasenameNoExtension}.exe), điều này có nghĩa là nếu helloworld.cpp
là tệp đang hoạt động, chương trình sẽ được đặt thành helloworld.exe
. Thuộc tính args
là một mảng các đối số để truyền cho chương trình trong quá trình chạy.
Lưu ý: Kể từ bây giờ, nút chạy và F5 sẽ đọc từ tệp launch.json của bạn khi khởi chạy chương trình của bạn cho mục đích gỡ rối.
Cấu hình C/C++
Nếu bạn muốn kiểm soát nhiều hơn trên tiện ích C/C++, bạn có thể tạo một tệp c_cpp_properties.json, nơi bạn có thể thay đổi các cài đặt như đường dẫn đến trình biên dịch, đường dẫn bao gồm, tiêu chuẩn C++ (mặc định là C++17) và nhiều hơn nữa.
Bạn có thể xem giao diện cấu hình C/C++ bằng cách chạy lệnh C/C++: Edit Configurations (UI) từ Bảng Lệnh (⇧⌘P (Windows, Linux Ctrl+Shift+P)).
Điều này sẽ mở trang C/C++ Configurations. Khi bạn thay đổi ở đây, VS Code sẽ ghi chúng vào một tệp có tên là c_cpp_properties.json trong thư mục .vscode.
Visual Studio Code đặt các cài đặt này vào .vscode/c_cpp_properties.json. Nếu bạn mở tệp này trực tiếp, nó sẽ trông giống như thế này:
{ "configurations": [ { "name": "Win32", "includePath": ["${workspaceFolder}/**"], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "windowsSdkVersion": "10.0.18362.0", "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "msvc-x64" } ], "version": 4 }
Bạn chỉ cần thêm vào mục Include path nếu chương trình của bạn bao gồm các tệp tiêu đề mà không nằm trong không gian làm việc của bạn hoặc trong đường dẫn thư viện tiêu chuẩn.
Đường dẫn trình biên dịch
Thiết lập compilerPath là một thiết lập quan trọng trong cấu hình của bạn. Tiện ích C/C++ sử dụng nó để suy ra đường dẫn đến các tệp tiêu đề của thư viện tiêu chuẩn C++. Khi tiện ích biết nơi tìm các tệp đó, nó có thể cung cấp các tính năng hữu ích như gợi ý thông minh và điều hướng Go to Definition.
Tiện ích C/C++ cố gắng điền compilerPath với vị trí trình biên dịch mặc định dựa trên những gì nó tìm thấy trên hệ thống của bạn. Tiện ích tìm kiếm trong một số vị trí trình biên dịch thông thường.
Thứ tự tìm kiếm compilerPath như sau:
- Kiểm tra trình biên dịch C++ Microsoft đầu tiên.
- Sau đó, tìm g++ trên Windows Subsystem for Linux (WSL).
- Sau đó, tìm g++ cho Mingw-w64.
Nếu bạn đã cài đặt g++ hoặc WSL, bạn có thể cần thay đổi compilerPath để phù hợp với trình biên dịch ưu tiên của bạn cho dự án. Đối với Microsoft C++, đường dẫn nên trông giống như thế này, tùy thuộc vào phiên bản cụ thể mà bạn đã cài đặt:
"C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe"
Sử dụng lại cấu hình C++ của bạn
VS Code được cấu hình để sử dụng trình biên dịch C++ Microsoft. Cấu hình áp dụng cho không gian làm việc hiện tại. Để sử dụng lại cấu hình, chỉ cần sao chép các tệp JSON của bạn vào một thư mục .vscode trong thư mục dự án mới và đổi tên các tệp nguồn và thực thi theo cần thiết.