Giải thích về Debug và Release của Visual Studio

Trong Visual Studio có 2 config mặc định là Debug và Release. Mục đích của các config này dùng để hỗ trợ lập trình viên dễ dàng kiểm tra lỗi của phần mềm. 2 config này làm cho chương trình chạy hoàn toàn khác nhau tuy nhiên ít được giải thích. Bài viết này sẽ giải thích những lỗi hay gặp của người mới lập trình.

Trong bài này lấy ví dụ là bạn đang build 1 chương trình bằng C++ tạo ra file exe. Lấy ví dụ về đọc biển số xe hơi viết bằng C++ để minh họa. Trong repo IPSSedu có nhiều solution, bạn chỉ cần chạy IPSScar_VS2015.sln để hiểu các giải thích bên dưới.

Sự khác biệt

Config Debug dùng debug (tất nhiên) và config Release dùng để tạo ra chương trình để sử dụng. Như vậy sự khác biệt dễ thấy là:
– Config Debug chạy chậm, config Release chạy nhanh
– Config Debug dễ dàng xem kết quả của biến, config Release có biến xem được có biến thì không
– Config Debug tạo ra file exe có dung lượng lớn, config Release tạo ra file có dung lượng nhỏ

Từ đó suy ra config Debug chỉ dùng cho lập trình viên, config Release dành cho sản phẩm hoàn chỉnh. Không được gửi bản debug cho khách hàng.

Cách thức Visual Studio áp dụng

Đầu tiên giải thích một chút về cấu trúc IPSScar_VS2015.sln. Trong chương trình đọc biển số xe hơi có 1 chương trình chính build ra exe (CarDetector). Các thư viện của OpenCV build ra file *.lib để include vào trong file exe đó.

Ở combobox lựa chọn config có Debug và Release, ở combobox lựa chọn platform có Win32 và x64. Như vậy bạn có được 4 config gồm:
mode_vs

  1. Debug Win32
  2. Release Win32
  3. Debug x64
  4. Release x64

Với mỗi config chính các bạn có thể lựa chọn các project chạy các config khác nhau. Ấn vào dòng Configuration Manager, cửa sổ hiện lên cho phép chúng ta chọn config nào của project sẽ được chọn khi ta thay đổi config của solution.

config_manager

Có nhiều project nên với mỗi config của solution bạn có thể chọn config riêng của từng project. Ờ đây mình config theo cách mặc định là solution config gì thì project config đó. Theo như hình trên thì solution config là Debug x64 thì các project cũng chọn là Debug x64.

Bạn có thể chọn tùy ý, tuy nhiên config không tương ứng rất dễ xảy ra lỗi. Ví dụ solution config là Debug x64, bạn chọn các project chạy config Release x64 cũng vẫn có thể chạy được.

Config từng project

Với mỗi project sẽ có config riêng, thông dụng là: tên file output, đường dẫn output, các linker, processor,…

Ấn chuột phải vào project bạn muốn config chọn Properties. Trong cửa sổ hiện ra có các mục bên trái, chọn từng mục sẽ hiện ra các config bên phải. Ví dụ như hình dưới ta có 1 số config

properties_manager

– Output Directory: thư mục chứa file exe output.
– Intermediate Directory: thư mục chứa file tạm trong quá trình build
– Target Name: tên file output
– Target Extension: đuôi file output

Trong project mình đưa có sẵn example config thành công, bạn có thể thay đổi để xem kết quả.

Cách tạo thêm config cho solution và project

Để tránh nhầm lẫn đa số các lập trình viên không đụng đến config mặc định là Debug và Release. Người ta sẽ tạo ra config mới như là Develop chẳng hạn. Trong config Develop các lib chạy config Release, còn project chính chạy config Debug. Mục đích là để chương trình chạy nhanh hơn vì chúng ta chỉ cần debug project chính, còn lib OpenCV đã stable rồi nên chạy Release.

Trong cửa sổ Configuration Manager hiện ra, các bạn ấn vào combobox chọn <New…>. Trong cửa sổ hiện ra bạn có thể tạo config hoặc platform mới, ý nghĩa của các lựa chọn là:
new_config
– Name: đặt tên cho config mới, như là Develop
– Copy settings from: nếu để Empty thì config mới sẽ lấy các giá trị mặc định. Còn chọn copy from thì config này sẽ copy y hệt config bạn chọn.
– Create new project configurations: nếu chọn thì các project con cũng tạo ra config giống như vậy. VD: bạn tạo config Develop thì các project con cũng tạo config Develop.

Tương ứng như vậy bạn cũng có thể tạo platform mới:
new_platform

Bạn có thể tạo platform theo ý thích, tuy nhiên không nên đụng vào platform mà sử dụng các platform có sẵn. Các platform có sẵn thông dụng gồm Win32, x64 và ARM.

Thông tin thêm

  • Các chương trình nhỏ thì sự khác biệt về tốc độ là không đáng kể. Các chương trình lớn sử dụng nhiều code, nhiều lib mới thấy khác biệt
  • Sự khác biệt giữa 2 config trong C# không nhiều, C++ mới nhiều
  • File debug thường có thêm chữ d phía sau. VD: testd.exe, test_d.exe,…
  • Nếu solution có nhiều platform thì đặt tên kèm theo platform để dễ phân biệt. VD: test-x64d.exe, test-x86d.exe,…
  • Win32 tương đương x86
  • Các macro có dạng $ giúp cho lập trình viên config để chạy trên nhiều máy khác nhau. VD: $(SolutionDir) là thư mục chứa file *.sln

Link repo Github sử dụng trong bài: IPSSedu

Leave a Reply