2008-10-07 28 views
49

Dường nhưvết vs gỡ lỗi trong NET BCL

phần lớn giống nhau, ngoại trừ đáng chú ý là gỡ lỗi sử dụng được biên dịch ra trong một cấu hình phát hành.

Khi nào bạn sẽ sử dụng cái này chứ không phải cái kia? Câu trả lời duy nhất cho điều này tôi đã đào tạo cho đến nay chỉ là bạn sử dụng lớp Gỡ lỗi để tạo đầu ra mà bạn chỉ thấy trong cấu hình gỡ lỗi và Dấu vết sẽ vẫn ở trong cấu hình phát hành, nhưng điều đó không thực sự trả lời câu hỏi trong đầu tôi.

Nếu bạn đang đi để cụ mã của bạn, tại sao bạn lại sử dụng gỡ lỗi, vì vết có thể được tắt mà không có một biên dịch lại?

Trả lời

48

Sự khác biệt chính là điểm bạn cho biết: Gỡ lỗi không được bao gồm trong bản phát hành, trong khi Trace là. Sự khác biệt dự định, như tôi hiểu, là các nhóm phát triển có thể sử dụng Debug để phát ra các thông điệp phong phú, mô tả có thể chứng minh quá chi tiết (hoặc tiết lộ) cho người tiêu dùng của sản phẩm, trong khi Trace được dự định phát ra các loại thông điệp cụ thể hơn hướng tới việc thiết lập một ứng dụng.

Để trả lời câu hỏi cuối cùng của bạn, tôi không thể nghĩ ra lý do để sử dụng Debug để tạo một đoạn mã mà tôi định phát hành.

Hy vọng điều này sẽ hữu ích.

+6

Tôi không đồng ý hoàn toàn với câu trả lời này. Dấu vết là cấp thấp hơn Debug và không bao giờ được sử dụng trong sản xuất. Theo kinh nghiệm của tôi, dấu vết được sử dụng khi bắt đầu các phương thức hoặc "truy tìm" một phần công việc khi nó đi qua một luồng công việc và theo một số cách, hiển thị ngăn xếp cuộc gọi. Mọi thứ ở trên và bao gồm Thông tin phải là các cấp duy nhất được sử dụng trong sản xuất. Đó là thông tin, cảnh báo, lỗi, gây tử vong. –

+0

Tôi nghĩ rằng một khác biệt khác là bạn có thể cấu hình [Trace Listeners] (http://msdn.microsoft.com/en-us/library/4y5y10s7 (v = vs.110) .aspx) trong ứng dụng của bạn và định tuyến đầu ra của dấu vết cho phù hợp. Trình theo dõi mặc định trong Visual Studio sẽ hướng các thông điệp theo dõi tới luồng đầu ra Gỡ lỗi. – orad

+6

Truy tìm là thứ mà ** nên ** được sử dụng trong quá trình sản xuất. Điều quan trọng là ** mọi hệ thống con của Windows đều chứa mã theo dõi. Mỗi lần tìm kiếm ổ đĩa cứng, mọi cấp phát bộ nhớ, mỗi ngắt, chuyển đổi ngữ cảnh của CPU, mọi lịch trình chuỗi đều có mã truy tìm được mở. Nền tảng theo dõi sự kiện cho nền tảng Windows (ETW) là một hệ thống truy tìm cực kỳ nhẹ, bất cứ ai có thể kích hoạt bất cứ lúc nào trên bất kỳ Windows PC. [System.Diagnostics.Tracing.EventSource] (https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx) là cách được quản lý để gửi các sự kiện theo dõi tới ETW. –

3

Tôi sẽ xem xét việc sử dụng log4net để truy tìm vì khả năng của nó linh hoạt và mạnh mẽ hơn nhiều.

Nhưng đối với các thông báo gỡ lỗi thực sự mà tôi không bao giờ có ý định cho bất kỳ ai khác ngoài tôi hoặc người thử nghiệm nội bộ để xem, tôi có thể gắn bó với Debug.

+0

Câu hỏi về khung loggin nào thích hợp hơn cho thấy log4net không linh hoạt hơn hoặc mạnh mẽ hơn các mạng khác. http://stackoverflow.com/questions/4775194/when-should-i-use-tracing-vs-logger-net-enterprise-library-log4net-or-ukadc-di – sam

1

Bạn đã trả lời câu hỏi của riêng mình. Nếu thông báo Gỡ lỗi được lưu lại, mọi người có thể nhìn thấy chúng. Ví dụ: giả sử bạn làm:

 
Debug.WriteLine("Connecting to DB with username: blah and PW: pass"); 

Bất kỳ ai giải mã mã của bạn đều có thể thấy điều đó. Nhưng đó có thể là một cái gì đó cực kỳ quan trọng để bạn biết trong quá trình thử nghiệm.

Dấu vết khác nhau. Nếu bạn đang đi để làm Trace, tôi có thể chỉ cần sử dụng log4net.

2

Đối với các khối mã nhạy cảm hiệu suất cao, để lại Trace được biên dịch nhưng bị vô hiệu hóa có thể tạo sự khác biệt về hiệu suất.

3

Sự khác biệt duy nhất giữa theo dõi và gỡ lỗi là các câu lệnh theo dõi được bao gồm theo mặc định trong chương trình khi nó được biên dịch thành bản phát hành bản phát hành, trong khi câu lệnh gỡ lỗi thì không.

Như vậy, lớp debug được chủ yếu sử dụng để gỡ lỗi trong giai đoạn phát triển, trong khi dấu vết có thể được sử dụng cho thử nghiệm và tối ưu hóa sau khi ứng dụng được biên soạn và phát hành.

+2

Điều này hoàn toàn phụ thuộc vào hằng số biên dịch TRACE, hiện tại là mặc định cho Gỡ lỗi và Phát hành. –

5

Gỡ lỗi được sử dụng cho mục đích gỡ lỗi thuần túy. Nó phát ra các thông điệp phong phú trong gỡ lỗi thực hiện (chế độ gỡ lỗi).

Dấu vết giúp gỡ lỗi ứng dụng, sửa lỗi và lược tả (sau khi phát hành).

Lớp gỡ lỗi không được sử dụng trong chế độ phát hành.

+1

Điều này hoàn toàn phụ thuộc vào các hằng số biên dịch TRACE và DEBUG. –

+0

@VincePanuccio Các thiết lập mặc định xây dựng là những gì họ đang có bởi vì Debug và Trace được dự định sẽ được sử dụng như câu trả lời này cho biết. Có, bạn có thể thay đổi hằng số TRACE và DEBUG để có được hành vi khác nhau, nhưng nó không phải là những gì hai lớp được thiết kế xung quanh. – Darryl

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