- vừa được xem lúc

Nên dùng cấu hình Debug hay Release? Ý nghĩa của thư mục bin và obj

0 0 10

Người đăng: Tờ Mờ Sáng học Lập trình

Theo Viblo Asia

Mở đầu

Có thể khi còn là học sinh, sinh viên ngồi trên ghế nhà trường, chúng ta sẽ luôn mặc định lựa chọn cấu hình Debug khi build chương trình.

Tuy nhiên đến khi đi làm, các bạn sẽ thường phải tiếp xúc thêm với một build target nữa đó là Release.

Cùng mình tìm hiểu chi tiết về 2 loại cấu hình này để đỡ bỡ ngỡ khi bước vào các dự án thực tế nhé!

Build target là gì?

Một build target (hay còn gọi là build configuration) là tập hợp các cài đặt của project, xác định cách IDE sẽ build project của bạn.

Khi bạn tạo một project mới, hầu hết các IDE sẽ thiết lập 2 build target khác nhau đó là:

  • Cấu hình debug: được thiết kế để giúp bạn debug chương trình của mình, thường được sử dụng trong quá trình code.

  • Cấu hình release: dành cho việc phát hành chương trình của bạn ra public cho mọi người sử dụng.

image.png

Tìm hiểu chi tiết về cấu hình Debug và Release

Để xem chi tiết các thông tin về Build target trên Code::Blocks, chúng ta có thể vào menu Project > Chọn Properties > Sau đó chọn tab Build targets

image.png

  • Ở đây các bạn có thể thấy phía bên trái là 2 build target: DebugRelease. Bên phải là những thông tin cấu hình của từng build target này.

  • Platform: hỗ trợ các nền tảng nào. Bấm vào dấu 3 chấm các bạn sẽ thấy vì đây là console project, nên nó có thể hoạt động trên cả Windows, Unix và Mac.

    image.png

  • Type: loại ứng dụng, ở đây là Console application.

  • Output filename: tên file output, ở đây là HelloWorld.exe.

    • Với cấu hình debug thì file này sẽ được lưu trong thư mục Debug, nằm trong thư mục bin (viết tắt của binary), thư mục này sẽ chứa các executable file gồm các chuỗi nhị phân.

    • Còn nếu chuyển sang cấu hình release, thì file output sẽ được lưu trong thư mục Release, cũng nằm trong thư mục bin luôn.

    • Thư mục bin này chắc các bạn đã đâu đó từng nhìn thấy khi mở vào thư mục chứa code của mình rồi. Hi vọng sau khi xem video này của mình, các bạn đã hiểu thư mục bin này dùng để làm gì.

    • Ví dụ code của mình nằm trong ổ C, thư mục Test. Trong thư mục Test hiện tại đang có thư mục HelloWorld, chính là project mà mình đã tạo ở bài học trước. Trong thư mục HelloWorld, các bạn sẽ thấy có thư mục bin ở đây. Và đi vào trong thư mục bin, các bạn có thể thấy xuất hiện 2 thư mục con là DebugRelease. Trong 2 thư mục này sẽ có 2 executable file HelloWorld.exe tương ứng.

      image.png

      image.png

Một số thông tin khác có trong build target như:

  • Execution working dir: là nơi chương trình sẽ được thực thi khi bạn nhấn Run hoặc Build and Run. Mặc định ở đây là dấu chấm (.), tức là chính thư mục của project hiện tại. Ví dụ như chương trình này là thư mục HelloWorld.

  • Object output dir: là thư mục chứa các object file được tạo ra sau khi biên dịch từ các file source code C++

    • Ở đây các bạn có thể thấy đối với cấu hình Debug thì thư mục này là thư mục Debug nằm trong thư mục obj (viết tắt của object)

    • Cũng giống như thư mục bin, mình tin là các bạn cũng từng nhìn thấy thư mục obj này trong project của mình rồi. Nó nằm ở ngay bên dưới thư mục bin.

    image.png

    • Trong thư mục obj có 2 thư mục con là Debug và Release. Mở thử thư mục Release chúng ta sẽ thấy trong này đang có file main.o, chính là object file duy nhất của chương trình HelloWorld.

    image.png

    • Bởi vì chương trình Hello World của chúng ta chỉ có duy nhất 1 file source code là main.cpp mà thôi.

    • Giờ thì các bạn đã hiểu ý nghĩa của thư mục obj là gì rồi đúng không nào?

  • Build target file: là các file sẽ được biên dịch khi build. Ở đây hiện tại chỉ có duy nhất file main.cpp mà thôi

Những option quan trọng về debug và tối ưu hóa

Ngoài những thông tin trên, các bạn còn có thể vào phần Build options để xem thêm một số thông tin quan trọng khác.

  • Ví dụ như ở cấu hình Debug sẽ được đánh dấu tick ở phần Produce debugging symbols, tức là tạo ra các thông tin debug. Ở cấu hình Release thì option này sẽ bị tắt bỏ.

image.png

  • Ngoài ra, lăn chuột xuống phần Optimization bên dưới, ở cấu hình release mặc định sẽ được bật 2 option liên quan đến tối ưu hóa để tối ưu hóa tốc độ chạy và dung lượng file output. Trong khi cấu hình Debug sẽ tắt 2 option này.

image.png

  • Qua đó các bạn có thể hiểu rằng, với cấu hình Debug, chương trình của bạn sẽ có dung lượng lớn hơnchạy chậm hơn, nhưng đổi lại sẽ dễ để debug hơn nhiều. Trong khi cấu hình Release sẽ được tối ưu hóa cho việc phát hành sản phẩm và cũng sẽ hữu ích khi bạn cần kiểm tra hiệu năng chương trình.

Kiểm chứng dung lượng file khi build

Các bạn có thể kiểm chứng những gì mình chia sẻ ở trên bằng cách quay lại code chương trình Hello World.

  • Nhấn Rebuild chương trình ở cấu hình Debug, nhìn vào phần Build log, các bạn sẽ thấy thông tin Output file có dung lượng là 75.78KB

    image.png

  • Sau đó mình chuyển qua cấu hình Release, nhấn Rebuild. Lúc này dung lượng output file chỉ còn 21.50KB

    image.png

  • Sự khác biệt này phần lớn chính là do những thông tin liên quan đến debug được lưu giữ trong cấu hình Debug.

Kết luận

Tóm lại qua bài viết này, mình hi vọng các bạn sẽ có thể hiểu rõ hơn về sự khác nhau giữa cấu hình Debugcấu hình Release. Cũng như ý nghĩa của các thư mục như bin, obj.

Nói chung, thông thường bạn sẽ để các cài đặt này ở giá trị mặc định, trừ khi bạn có lý do cụ thể để thay đổi cài đặt nào đó.

Trong quá trình code, tốt nhất bạn nên sử dụng cấu hình Debug.

Còn khi bạn đã sẵn sàng phát hành chương trình của mình cho người khác sử dụng, hoặc muốn kiểm tra hiệu năng của chương trình, thì hãy chuyển sang cấu hình Release.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học lập trình game cần những gì?

Lập trình game là làm gì. Các ngôn ngữ các bạn có thể sử dụng để lập trình game : C, C++, C#, Java, Python,... Các bước cơ bản để lập trình game. . Hiển thị: Đã là game thì hiển thị không thể thiếu, lúc đầu các bạn chỉ làm cho phần hiển thị thật đơn giản, các bạn đừng quá chú tâm vào việc làm sao ch

0 0 44

- vừa được xem lúc

[MFC] Http request with winsock2.h

Giới thiệu. Xin chào, trong bài này mình sẽ giới thiệu 1 số lưu ý khi sử dụng thư viện winsock2.h (thư viện window socket) sử dụng trong window app. Đầu tiên, bạn sẽ dễ dàng search được 1 ví dụ cụ thể trên document của winsock2.

0 0 35

- vừa được xem lúc

Design parttern

Builder. 1. Ý tưởng. Builder là một mẫu thiết kế sáng tạo cho phép bạn xây dựng các đối tượng phức tạp theo từng bước.

0 0 32

- vừa được xem lúc

Kỹ thuật viết mã nguồn hiệu quả

Kỹ thuật viết mã nguồn hiệu quả? Hôm nay bài viết này mình không đề cập tới thuật toán, hãy coi như rằng chúng ta đã có thuật toán tốt nhất có thể và bây giờ chúng ta phải làm gì để có thể tăng tính hiệu quả của code. Bài viết này mình sẽ lấy ngôn ngữ lập trình C/C++ để minh họa về các hàm, các thao

0 0 38

- vừa được xem lúc

Singleton Design pattern

Singleton Design pattern. 1. Vấn đề. - Ý tưởng:.

0 0 35

- vừa được xem lúc

So sánh Python và C++

Cuộc tranh luận giữa Python và C ++ là một chủ đề hấp dẫn vì cả hai ngôn ngữ lập trình đều rất khác nhau về cú pháp, tính đơn giản, cách sử dụng và cách tiếp cận tổng thể để lập trình. Vì vậy, mọi người cảm thấy khó khăn khi lựa chọn ngôn ngữ lập trình nào để học.

0 0 38