Sự khác biệt giữa Console.WriteLine () và Debug.WriteLine () là gì?


93

Sự khác biệt giữa vs là gì?Console.WriteLine()Debug.WriteLine()

Câu trả lời:


106

Console.WriteLine ghi vào luồng đầu ra tiêu chuẩn, trong gỡ lỗi hoặc phát hành. Debug.WriteLine ghi vào trình nghe theo dõi trong bộ sưu tập Trình nghe , nhưng chỉ khi chạy trong gỡ lỗi. Khi ứng dụng được biên dịch trong cấu hình phát hành, các phần tử Gỡ lỗi sẽ không được biên dịch thành mã.

Khi Debug.WriteLineghi vào tất cả các trình nghe theo dõi trong bộ sưu tập Người nghe , có thể điều này có thể được xuất ở nhiều nơi (cửa sổ xuất Visual Studio, Bảng điều khiển, tệp Nhật ký, ứng dụng của bên thứ ba đăng ký một trình nghe (tôi tin rằng DebugView làm được điều này ), Vân vân.).


7
DebugView nghiêm ngặt giám sát các thư được ghi lại thông qua lệnh gọi API Windows gốc OutputDebugString(và DebugPrint). Việc DefaultTraceListenerghi vào OutputDebugString, đó là lý do tại sao DebugView nhìn thấy đầu ra. msdn.microsoft.com/en-us/library/…
— MarkJ

41

Console.WriteLine()dành cho các chương trình chế độ giao diện điều khiển. Một tính năng hay của quá trình lưu trữ Visual Studio làm cho đầu ra của nó xuất hiện trong cửa sổ Visual Studio Output trong khi gỡ lỗi cho các quá trình không có bảng điều khiển. Điều đó rất hữu ích trong khi gỡ lỗi nhưng hãy lưu ý rằng bạn nên xóa mã này (hoặc bọc nó bằng #ifdef DEBUG) khi bạn đã sẵn sàng tạo bản phát hành. Nếu không, nó sẽ thêm chi phí không cần thiết vào chương trình của bạn. Điều này làm cho nó ít lý tưởng hơn cho việc theo dõi gỡ lỗi.

Debug.WriteLine()tạo thông tin theo dõi nếu bạn xây dựng với #defined có điều kiện DEBUG. Tính năng này được bật theo mặc định trong bản dựng Gỡ lỗi. Nơi đầu ra kết thúc có thể được định cấu hình trong tệp app.exe.config. Nếu cấu hình này không bị ghi đè, .NET sẽ tự động cung cấp một phiên bản của lớp DefaultTraceListener. Nó gửi văn bản Debug.WriteLine () với hàm API Windows OutputDebugString () tới trình gỡ lỗi. Trình gỡ lỗi Visual Studio làm cho điều đó xuất hiện trong cửa sổ Đầu ra, giống như Console.WriteLine ().

Một lợi thế rõ ràng của Debug.WriteLine () là nó không tạo ra chi phí trong bản dựng Release, các lệnh gọi được loại bỏ một cách hiệu quả. Tuy nhiên, nó không hỗ trợ định dạng hỗn hợp, bạn sẽ cần String.Format () cho điều đó. Để theo dõi gỡ lỗi, lớp Gỡ lỗi sẽ là lựa chọn của bạn.


18

Nếu mục đích sử dụng Console.WriteLine của bạn chỉ là để gỡ lỗi, bạn nên sử dụng Debug.WriteLine .

Nếu bạn muốn hiển thị thông báo cho người dùng của mình (Trong ứng dụng bảng điều khiển), bạn sẽ sử dụng Console.WriteLine .

Debug.WriteLine chỉ dành cho mục đích gỡ lỗi ứng dụng của bạn. Trong chế độ phát hành, các câu lệnh gỡ lỗi của bạn sẽ bị bỏ qua.

Một cách sử dụng khác của ứng dụng console là để kiểm tra các hội đồng riêng. Thay vì cách tiếp cận truyền thống là tạo một số loại khai thác kiểm tra GUI để kiểm tra phiên bản đã biên dịch của DLL, bạn có thể chỉ cần xây dựng lại DLL như một ứng dụng bảng điều khiển và nhập / xuất từ ​​/ đến bảng điều khiển. Tôi nhận thấy kỹ thuật này nhanh hơn so với việc dành thời gian tạo bộ khai thác thử nghiệm GUI.


6
"Nếu bạn muốn hiển thị thông báo cho người dùng của mình, bạn sẽ sử dụng console.writeline." Điều này có thể gây nhầm lẫn cho một số người vì nó sẽ chỉ hiển thị một cái gì đó cho người dùng nếu thực thi trong một ứng dụng bảng điều khiển.
— Matt Wilko
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.