2012-10-18 42 views
20

Tôi có mã này trong lớp C# của mình.Khi #if DEBUG chạy

#if DEBUG 
     private const string BASE_URL = "http://www.a.com/"; 
#else 
     private const string BASE_URL = "http://www.b.com//"; 
#endif 

Những gì tôi muốn hỏi là khi nào con đường

#if DEBUG 

trong các mã được thực thi?

Liệu nó có được thực hiện

  1. Khi tôi chạy lên một phiên debug trong Visual Studio?
  2. Khi tôi chạy thủ công tệp exe hoặc dll được đề cập từ thư mục gỡ lỗi?
  3. Bất kỳ trường hợp nào khác mà tôi quên đề cập đến?
+2

'#if DEBUG' không bao giờ chạy nhưng ảnh hưởng đến quá trình biên dịch mã. –

Trả lời

31

#if DEBUG Đó là một định nghĩa preprocessor.

Nó biên dịch khi bạn xác định hằng số DEBUG. Và có, nó mặc định trên Debug Build Configuration.

Visual Studio 2010 Thuộc tính dự án: Visual Studio 2010 Project Properties

Nếu Define DEBUG constant được kiểm tra VS sẽ biên dịch:

private const string BASE_URL = "http://www.a.com/"; 

khác (không kiểm tra) VS sẽ biên dịch:

private const string BASE_URL = "http://www.b.com//"; 
+0

Câu trả lời hay. Đây vẫn là trường hợp trong VS2017. – robnick

12

Đó là chỉ thị tiền xử lý. Mã trong phần DEBUG được biên dịch khi bạn thực hiện xây dựng gỡ lỗi (cụ thể hơn khi hằng số DEBUG được xác định). I E. nếu bạn thực hiện xây dựng gỡ lỗi BASE_URL sẽ trỏ đến www.a.com. Nếu không, nó sẽ trỏ đến www.b.com.

7

Khi bạn biên dịch với chỉ thị DEBUG. Vì vậy, nếu nó được thiết lập chỉ có dòng đầu tiên sẽ là một phần của nhị phân biên dịch và nếu nó không được thiết lập dòng thứ hai sẽ là một phần của nhị phân.

Các DEBUG là do thiết lập mặc định khi bạn đang soạn thảo cấu hình debug trong VS tuy nhiên bạn có thể thiết lập nó bằng tay đối với bất kỳ cấu hình

2

Nếu bạn đang biên dịch với cấu hình DEBUG, mã trước khi lin khác e sẽ được biên dịch trong khi người kia sẽ không. Nếu bạn biên dịch trong bất kỳ cấu hình nào khác, dòng thứ hai sẽ được biên dịch trong khi dòng đầu tiên sẽ không được biên dịch.

+0

Đúng trong thiết lập mặc định của các dự án trong VS tuy nhiên không sử dụng VS hoặc thay đổi thiết lập có thể bao gồm biểu tượng DEBUG trong cấu hình _any_ (bao gồm bản phát hành nếu bạn muốn) –

+0

@RuneFS Tốt, cảm ơn. –

3

Đó là "chỉ thị trình biên dịch", có nghĩa là nó sẽ bao gồm hoặc loại trừ mã từ quá trình xây dựng (hoặc biên dịch) dựa trên # if mà bạn đưa vào. Biểu tượng DEBUG nằm trong các thuộc tính của dự án của bạn, và trong Visual Studio thường được loại bỏ tự động trên bản dựng "Release". Vì vậy, về cơ bản, nó không phải là trong Visual studio chạy trong gỡ lỗi, và nó không có được trong bất kỳ thư mục nhất định, mã của bạn chỉ được xây dựng theo cách đó.

1

VS 2017 thực sự cảm nhận cấu hình hoạt động và ví dụ: xám ra điều kiện gỡ lỗi nếu cấu hình phát hành được chọn.

enter image description here

0

Đi tới "Thuộc tính dự án" -> Tab xây dựng của ứng dụng. Nếu Configuration: Active (Debug) thì cấu hình Debug được kích hoạt. Mã dưới đây sẽ in ra bảng điều khiển.

#if DEBUG 
    Console.WriteLine("in debug mode..."); 
#endif 

Nếu cấu hình: Đang hoạt động (Release) thì kích hoạt cấu hình phát hành.Bạn sẽ in ra bảng điều khiển.

#if RELEASE 
    Console.WriteLine("in release mode..."); 
#endif 

Nếu bạn muốn chuyển đổi giữa Debug và Release chế độ sử dụng "Debug/phát hành/Configuration Manager" thả xuống ngay dưới Tools Menu.Apologies như hầu hết các nhà phát triển biết điều đó ... nhưng đôi khi bị bỏ qua và gây nhầm lẫn tại sao mã trên không hoạt động chính xác.

Các vấn đề liên quan