2009-09-16 38 views
6

Sử dụng Visual   Studio   2008, để bắt đầu gỡ lỗi tùy thuộc vào tâm trạng của tôi, tôi sẽ đính kèm để xử lý và nhấn điểm ngắt theo cách đó hoặc tôi sẽ đặt System.Diagnostics.Debugger.Break() vào một vị trí thích hợp trong mã và bắt đầu gỡ lỗi khi nó ngắt điểm.Lợi ích của việc sử dụng System.Diagnostics.Debugger.Break() qua Đính kèm quy trình là gì?

Đôi khi, đôi khi tôi cần tìm!

Không nói về F5 -> chạy trong chế độ gỡ lỗi trong một giây ...

System.Diagnostics.Debugger.Break(); 

Câu hỏi:

Q) Tôi tò mò như những khác biệt nhỏ giữa mỗi tùy chọn?

Q) Những lợi ích và hạn chế của việc sử dụng từng quyền lợi là gì?

Tôi sẽ bắt đầu nó đi ...

Debugger.Break() nhược điểm = quên về Debugger.Break() 's và để lại cho họ trong đó!

Debugger.Break() benefits = Bắt đầu gỡ lỗi chính xác vị trí bạn muốn mà không cần nhấn các điểm ngắt không cần thiết khác có thể vẫn còn trong mã sẽ bị trúng nếu được đính kèm.

Pre empt các haters

tôi sẽ chỉ trước empt haters rằng chắc chắn sẽ nói nếu tôi đang sử dụng Debugger.Break() Tôi không hiểu cách đúng đắn về gỡ lỗi.

Tôi chỉ đang cố gắng bắt đầu cuộc trò chuyện ở đây vì tôi tin rằng có nhiều cách gỡ lỗi khác nhau tùy thuộc vào hoàn cảnh.

Trả lời

12

Tôi đã từng làm việc trên một ứng dụng dựa trên plugin đã thực hiện rất nhiều thứ khi khởi động. Nó sẽ làm phát hiện plugin trong số nhiều thứ khác. Tôi không thể chạy nó trực tiếp từ Visual Studio, do đó, F5 không phải là một tùy chọn, nhưng Đính kèm vào Debugger cũng không phải là một tùy chọn, bởi vì nhiều lần tôi sẽ cần phải gỡ lỗi tất cả những thứ xảy ra khi khởi động. Tôi sẽ không bao giờ có thể bắt kịp kịp thời với Đính kèm quy trình. Vì vậy, tôi chỉ cần đặt Debugger.Break() chính xác nơi tôi muốn.

Ví dụ khác; Tôi đã viết một lệnh ghép ngắn cho PowerShell. Những người bạn không chạy trong Visual Studio; bạn chạy chúng từ dòng lệnh PowerShell. Chúng thường là các ứng dụng nhỏ nhanh và không có cách nào bạn sẽ thu thập chúng kịp thời với Đính kèm vào Quy trình.

+3

Vâng, vi phạm mã khởi động có vẻ giống như trường hợp sử dụng chính. –

6

Ngoài câu trả lời của BFree, tôi thấy Break thỉnh thoảng hữu ích khi xử lý một sản phẩm kế thừa kém được thiết kế. Sản phẩm đặc biệt này có một thói quen xấu là nuốt hoặc bỏ qua các ngoại lệ, và các cơ chế khai thác gỗ của nó không (trên thực tế, không bao giờ làm) hoạt động đúng cách. Nó thường xuyên vi phạm nhiều thực hành tốt mà yêu cầu khách hàng phải "may mắn" để làm cho nó hoạt động trong thời gian chạy. Tôi đã bắt đầu thêm mã blurb nhanh chóng:

if(System.Diagnostics.Debugger.IsAttached) 
{ 
    System.Diagnostics.Debugger.Break(); 
} 

vào các điểm cụ thể mà tôi đang tập trung vào để gỡ lỗi.Điều này làm cho nó dễ dàng hơn cho tôi để xem những gì đã xảy ra khi nào và những gì đã bị vi phạm mà không vi phạm mã khi nó được điều hành bởi một khách hàng. (Ước mơ về đường ống của tôi là điều này cũng hy vọng, hãy bám vào người đồng nghiệp ít cau có của tôi.)

Vâng, tôi biết rằng đây không phải là một thực hành đặc biệt tốt và tôi sẽ không bao giờ làm điều đó trong mã mới. Nhưng hãy tin tôi đi, nếu bạn đang say mê thông qua cơ sở mã đó, bạn đã làm điều tương tự. ;)

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