Hướng dẫn cài đặt MSYS2 MinGW và cấu hình debugger cho Codeblock

Update 17/10/2021: Hướng dẫn cài đặt MSYS2 MinGW và cấu hình debugger cho Codeblock


1. Install MSYS2

Vào trang https://msys2.github.io/ và download installer về. Nhớ là nếu máy bạn xài là 64-bit thì bạn download msys2-x86_64, còn 32-bit thì download msys2-i686.

Máy mình là 64-bit, nên mình down bản x86_64. Mình install nó vào H:/msys2_64. Nhớ chọn “Run MSYS2 now” để update các thư viện sau khi install.

MSYS2InstallationFolder

Sau đó khi MSYS console đã được bật, bạn cần update pacman. pacman là công cụ của Arch Linux, tương đương với apt-get bên Ubuntu. Gõ lệnh:

pacman -Sy pacman

MSYS2_update_pacman

y để xác nhận update. Trong hình này vì mình đã update pacman rồi nên nó mới hỏi lại có reinstall hay không.

Sau đó đóng cửa sổ chương trình, vô Start Menu -> MSYS2 64-bit -> MSYS2 MSYS để bật lại MSYS console, chạy tiếp lệnh này để update các công cụ còn lại:

pacman -Syu

Bản MSYS2 này hình như thiếu cộng cụ make và vài công cụ giải nén khác. Để install 3 công cụ make, tar, và unzip, bạn chỉ cần gõ vài ba dòng lệnh là xong:

pacman -S make tar unzip

2. Install MinGW-w64

Tương tự như khi install make, bạn chỉ cần gõ dòng lệnh:

pacman -S mingw-w64-x86_64-gcc

(thế x86_64 bằng i686 nếu máy bạn là 32-bit)

Rồi bấm y chờ nó install là xong. Thời gian install khá lẹ, chưa đầy 2 phút là xong rồi.

Cửa số console hiện tại ko có MinGW trong PATH, nên sau khi install MinGW rồi, bạn nên bật MSYS2 MING64 (hoặc MING32) trong Start Menu thay vì MSYS2 MSYS.

MSYS2_g%20%20_version

Phiên bản gcc này không kèm sẵn gdb, nên bạn còn phải install thêm gdb cho mingw nữa:

pacman -S mingw-w64-x86_64-gdb

Và install thư viện Boost cực kì đơn giản với 1 dòng lệnh:

pacman -S mingw-w64-x86_64-boost

Nếu cần bạn cũng có thể install thêm gmp: pacman -S mingw-w64-x86_64-gmp, nhưng hình như nó đã có sẵn rồi.

3. Thêm MSYS và MinGW-w64 vào PATH

Ra ngoài Desktop, right-click vào This PC icon, chọn Properties. Bạn cũng có thể vào Control Panel -> System and Security -> System để bật cửa sổ này.

Chọn dòng Advanced system settings rồi Environment Variables…

SystemProperties_window

Trong cửa sổ Environment Variables, tạo System variables mới bằng cách bấm vào nút New… ở dưới:

Rồi tạo MSYS2_ROOT là đường dẫn tới thư mục chứa MSYS2 mà bạn đã install ở trên, cộng thêm /usr

MSYS2_ROOT

MINGW64_ROOT là đường dẫn tới thư mục MINGW64

MINGW64_ROOT

Tạo xong bạn vô lại cửa sổ Environment Variables, double-click vào dòng path ở trên (trong thẻ User variables), rồi bấm New để thêm vào 2 đường dẫn như trong hình:

Ra ngoài bật cmd lên, gõ vào g++ --version, make --version, where g++, where make để kiểm tra xem đã thêm 2 đường dẫn kể trên vào PATH chưa:

CheckMSYS-MINGW64Path

Nếu nó không báo lỗi thì bạn đã thêm MSYS2 usr/binmingw64/bin vào PATH thành công!

4. Setup MinGW-w64 compiler và debugger cho Code::Blocks

4.1. Setup debugger

Đầu tiên bạn cần tạo file pp.gdb trong thư mục %MINGW64_ROOT%\bin có nội dung như sau:

python
import sys, os
sys.path.insert(0, os.environ.get('MINGW64_ROOT') + '\\share\\gcc-6.2.0\\python\\libstdcxx\\v6')
from printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end

Tùy vào version của gcc mà bạn chọn thư mục tương ứng, ở đây gcc --version nó in ra 6.2.0 nên mình chọn path là '\\share\\gcc-6.2.0\\python\\libstdcxx\\v6'. Hiện tại gcc mới nhất là 8.2.0 thì sửa số 6 thành số 8.

Sau đó mở Code::Blocks lên, chọn Settings -> Debugger…, bấm nút Create Config và đặt tên nó là MSYS2 MINGW64.

Sau đó thêm thông tin cho debugger này:

4.2. Setup compiler

Chọn Settings -> Compiler…, bấm nút Copy để tạo thông tin cho compiler mới, đặt tên nó là MSYS2 MINGW64, Set as default luôn.

Và thêm thông tin cho Compiler này trong thẻ Toolchain executables:

Ở dòng cuối cùng, Code::Blocks đòi mingw32-make.exe, nó không có sẵn trong /mingw64/bin, bạn có thể install bằng cách gõ lệnh pacman -S mingw-w64-x86_64-make.

Vậy là xong. Khởi động lại Code::Blocks rồi mở 1 project compile, debug thử.

Hiện tại mình chạy thử thì thấy cái debugger này không parse được std::list nên bạn có thấy nó không hiện ra nội dung của std::list là bình thường. Nếu nội dung của std::string không hiện ra thì có thể phải cần set Debug -> Active debuggers -> MSYS2 MINGW64.

14 Likes

Thật ra ko cần thêm MSYS2 usr/binmingw64/bin vào PATH cũng được, nếu bạn cài nhiều phiên bản GCC trên Windows thì vào PATH xóa %MSYS2_ROOT%\bin%MINGW_ROOT%\bin đi.

Thêm 2 đường dẫn này vào PATH giúp bạn chạy file .exe bằng tay được (double click vô file .exe). Nếu bỏ đi thì bạn phải copy mấy file .dll còn thiếu trong mingw64/bin như libstdc++-6.dlllibgcc_s_seh-1.dll (có thể cần thêm libwinpthread-1.dll) vào cùng thư mục chứa file .exe mới double click chạy được.

6 Likes

Cho e hỏi ở bước 4.1 tạo file pp.gdb trong thư mục %MINGW64_ROOT%\bin mà thư mục này nằm đâu vậy

Bạn vô Explorer ấy, dán cái cụm %MINGW64_ROOT% vào chỗ browser rồi enter là thấy.

2 Likes

là thư mục cài đặt msys2\mingw64 ấy :V ví dụ cài msys2 vào C:\msys2 thì nó là C:\msys2\mingw64

mình tạo thêm 2 biếnMSYS2_ROOT=C:\msys2MINGW64_ROOT=%MSYS2_ROOT%\mingw64 vào biến PATH để khỏi mất công hiện full path lên dài dòng, dễ viết script khỏi nhớ path đó là gì đó mà :V

à mấy bản gcc mới của msys2 nó fix lỗi debugger này rồi có thể xài default debugger cũng ra được ko cần phải tạo thêm pp.dbg đâu.

3 Likes

a ơi cho e hỏi, e dùng win 7 mà đến chỗ click vào path rồi bấm new mà máy e k hiện chỗ new lên thì phải làm sao ạ?

e chụp màn hình lên a xem thử xem :V

à nó chỉ hiện ra 2 dòng thế này à :V
image

vậy thì e bấm vô dòng ở dưới Variable value rồi bấm nút End cho con trỏ nó trỏ ra ký tự sau cùng, rồi thêm vào ;%MSYS2_ROOT%\bin;%MINGW64_ROOT\bin (dấu ; là ngăn cách từng path) Ví dụ nó có giá trị là thế này

C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd

thì e thêm vào nó thành ra thế này là được:

C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd;%MSYS2_ROOT%\bin;%MINGW64_ROOT\bin
1 Like

Hướng dẫn cài đặt MSYS2 MinGW và cấu hình debugger cho Codeblock (17/10/2021)

Tutorial này là hướng dẫn cài đặt compiler (trình biên dịch) cho Code::Blocks, sử dụng MSYS2 MING64. Nếu bạn đã down compiler khác rồi thì có thể bỏ qua bước 1 và tới bước 2 để setup cho Code::Blocks. Chỉ cần tìm thư mục bin chứa file g++.exe ở đâu là được.

1. Install MSYS2 MINGW64

Sở dĩ mình chọn trình biên dịch thuộc MSYS2 là vì nhiều lý do:

  • Nó có sẵn rất nhiều các thư viện C++ khác, rất phù hợp với các bạn thích vọc C++ xa hơn những gì trong trường dạy. Muốn xài thư viện ngoài thư viện chuẩn của C++ thay vì phải vất vả down từng source về compile, có khi gặp lỗi ko biết cách sửa, hoặc down binary files về lại gặp conflict với compiler rất khó chịu. Ví dụ với MSYS2 muốn install gmp để tính toán số lớn chỉ cần gõ pacman -S mingw-w64-x86_64-gmp là xong, ko cần phải tự tay compile từ source. Hay install boost là thư viện khổng lồ chỉ cần gõ pacman -S mingw-w64-x86_64-boost là nó tự động install dùm, mình khỏi phải làm gì hết.
  • Môi trường MSYS2 rất giống với môi trường Arch Linux. Bản chất Arch là rolling release, MSYS2 bắt chước nên luôn update mới nhất trình dịch và các thư viện C++ khác.
  • MSYS2 có sẵn package manager pacman như pip của Python, là cái mà ngôn ngữ C++ còn thiếu.

1.1 Install MSYS2

Vào trang https://msys2.github.io/ và download installer về. Nếu máy bạn là máy cũ chỉ chạy được chương trình 32-bit thì vào https://repo.msys2.org/distrib/i686/, chọn file .tar.xz nào có ngày tháng gần nhất mà down về rồi giải nén. Nếu ko có chương trình giải nén được file .xz thì có thể xài 7-Zip. Bài hướng dẫn này sẽ chọn đường dẫn install là C:/msys64.

Sau khi install/giải nén xong hoặc chọn “Run MSYS2 64-bit now” để mở MSYS2 shell lên, hoặc vào C:/msys64 và mở msys2_shell.cmd lên
image

pacman -Syu vào MSYS2 shell để update MSYS lên bản mới nhất:

Gõ Enter để update. Update xong gõ Enter tiếp để đóng MSYS2 shell. Xong xuôi mở msys2_shell.cmd lên lại. Có thể vào Start menu mở cho dễ (chọn mở MSYS2 MSYS):
image

Gõ lại pacman -Syu lần nữa để update các tools của MSYS2:

Bản MSYS2 này hình như thiếu cộng cụ make và vài công cụ giải nén khác. Để install 3 công cụ make, tar, và unzip, bạn chỉ cần gõ pacman -S make tar unzip là xong:

1.2. Install MinGW-w64

Tương tự như khi install make, bạn chỉ cần gõ dòng lệnh pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb để install trình biên dịch GCC và debugger GDB phiên bản 64-bit. (Nếu máy bạn chỉ chạy chương trình 32-bit được thì xài dòng lệnh pacman -S mingw-w64-i686-gcc mingw-w64-i686-gdb)

Rồi bấm Enter chờ nó install là xong.

2. Setup MinGW-w64 compiler và debugger cho Code::Blocks

2.1. Setup debugger

2.1.1 Tạo Debugger config

Mở Code::Blocks lên, chọn Settings -> Debugger…
image

Bấm nút Create Config và đặt tên nó là MSYS2 MINGW64.
image
image

2.1.2 Đặt đường dẫn tới gdb.exe

Thêm thông tin cho debugger này, đầu tiên là đường dẫn tới gdb.exe:
image

2.1.3 Các lựa chọn khác

Sau đó là bỏ chọn “Disable startup scripts” đi và chọn “Evaluate expression under cursor”

2.2. Setup compiler

2.2.1 Tạo compiler profile mới

Chọn Settings -> Compiler…
image

Bấm nút Copy để tạo thông tin cho compiler mới
image

Đặt tên nó là MSYS2 MINGW64
image

Chọn Set as default luôn.
image

2.2.2 Trỏ path của profile mới tới compiler đã install sẵn trong máy

Bấm qua thẻ Toolchain executables:
image

Thêm Compiler’s installation directory vào:
image

2.2.3 Chọn debugger

Ở dưới đổi Debugger thành debugger mình vừa tạo ở bước 3.1:

2.2.4 Chọn make program

Với dòng Make program, bạn có thể gõ pacman -S mingw-w64-x86_64-make vào MSYS2 shell để install mingw32-make và để mingw32-make.exe ở dòng đó, hoặc có thể xài make của MSYS2 ở đường dẫn C:/msys64/usr/bin/make.exe.

2.2.4.1 Xài mingw32-make

Mở lại MSYS2 shell, gõ pacman -S mingw-w64-x86_64-make để install mingw32-make. Vậy là xong.

2.2.4.2 Xài make của MSYS2

Bấm qua thẻ Additional Paths
image

Chọn Add rồi thêm C:/msys64/usr/bin vào:
image
image

Qua thẻ Program Files sửa Make program lại make.exe là xong:

Kết quả (xài make của MSYS2):


(Nếu bạn xài mingw32-make thì dòng Make program sẽ có giá trị là mingw32-make.exe)

2.2.5 Chọn thêm default compile flags (phụ nhưng rất cần thiết)

Tới đây là xong rồi, nhưng để bật các tính năng mới nhất của C++ như C++17 thì qua bên thẻ Compiler settings chọn thêm vài thứ:
image

Có 2 flags cần thiết nhất là -std=c++17-Wall
image
image

Flag -pedantic này cũng cần nếu bạn muốn disable các gcc extensions theo ý mình là bậy bạ như VLA:
image

Các flag khác nên bật:
image
image
image
image
image

Mấy thứ này tùy chỉnh cho từng project cũng được, ở đây chỉnh thẳng cho compiler profile luôn để khi tạo project mới có sẵn mấy flag này rồi khỏi mất công bật lại nữa.

Cho chắc ăn, khởi động lại Code::Blocks rồi tạo 1 project mới để debug thử.

3. Debug với Code::Blocks

3.1 Tạo project mới

Ở màn hình chính của CB, chọn Create a new project:
image

Chọn Console application
image

Đặt tên gì đó, chẳng hạn test-cb-debugger:
image
Lưu ý: tạo project ở thư mục có đường dẫn KHÔNG có khoảng trắng trong path.

Trước khi bấm Finish nhớ tick ô Debug, và nhìn xem Compiler được chọn là MSYS2 MINGW64:

3.2 Debug test program

Sau khi project được tạo, qua khung Management bên trái, mở Sources ra và mở file main.cpp lên, sửa lại nội dung nó là:

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> p = {"Hello", "world"};
    std::cout << p[0] << " " << p[1] << "!\n";
}

Click chuột trái vào kế bên phải dòng thứ 7 để đặt break point:
image

Nhìn xem ở dòng này nó đang chọn Debug build:
image

Sau đó nhấn vào phím mũi tên màu đỏ để bắt đầu debug:
image

Thấy break point có thêm mũi tên vàng là nó đang dừng ở đó:
image

Cửa sổ ở dưới có chữ thế này là được:
image
Nếu ko in ra thế này kiểm tra lại xem đường dẫn tới gdb.exe trong bước 2.1.2 có đúng chưa.

Trong thanh Command, gõ p p rồi Enter để in ra biến p (chữ p đầu tiên là viết tắt của print). Nó in ra dòng này là debugger in bản đẹp thành công: (bản xấu nó in ra 3 4 dòng template gì đó nhức mắt lắm)
image
Nếu in ra bản xấu thì tạo project mới ở thư mục có đường dẫn KHÔNG có khoảng trắng/dấu cách.

Để mở Watch panel lên xem thì bấm vào icon áp chót ở thanh công cụ này
image
image

Chọn Watches là nó hiện lên cửa sổ Watch, resize nó lại thế này cho nhìn ổn là được:
image
Nếu ko hiện p ở Locals thì về lại bước 2.1.3 xem đã chọn đúng các lựa chọn chưa, ở đây có lẽ quên chọn Watch local variables.

Để chương trình chạy tiếp có thể bấm vào mũi tên màu đỏ cho debugger nó continue. Nếu muốn dừng debug thì bấm vào dấu X đỏ:
image

Vậy là bạn đã setup thành công MSYS2 và debugger cho Code::Blocks.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?