2011-11-03 40 views
10

Tôi đang gỡ lỗi một trang web ASP.NET với C# trong Visual Studio. Khi tôi đặt điểm ngắt (trong khi gỡ lỗi), theo thời gian, điểm ngắt được tạo sẽ tích lũy nhiều điểm ngắt con. (Xem here.)
Bây giờ, đôi khi tôi loại bỏ điểm ngắt bằng cách bấm vào dấu gạch ngang màu đỏ, điểm ngắt vẫn sẽ được nhấn vào lần tiếp theo dòng được thực hiện, vì các điểm ngắt con vẫn tiếp tục tồn tại.Vô hiệu hóa/xóa điểm ngắt con?

Xóa điểm ngắt trong cửa sổ điểm ngắt sẽ giải quyết được sự cố, nhưng thật khó chịu khi tìm đúng điểm ngắt khi bạn có nhiều tập hợp. Ngoài ra, việc loại bỏ một điểm ngắt với nhiều trẻ em là một hoạt động khá chậm.

Vì vậy, để có được câu hỏi, tôi có thể vô hiệu hóa việc tạo ra các điểm ngắt trẻ em, hoặc có cách nào để nhanh chóng loại bỏ tất cả trẻ em không?
Các giải pháp thay thế được đánh giá cao!


Xin lưu ý rằng đây không phải là bản sao này: Question on how to remove a Visual Studio Breakpoint, bởi vì tôi hỏi cách xử lý các điểm ngắt trẻ em. (Mặc dù mục tiêu dự định của chúng tôi là như nhau.)

+0

Mmmm, tại sao bạn chắc chắn rằng câu hỏi của bạn không phải là một bản sao? Dường như với tôi như bạn chỉ có một ý tưởng tốt hơn về cách đặt câu hỏi. Trong mọi trường hợp, câu trả lời của bạn chắc chắn là trên [trang Microsoft Connect được đăng bởi bài đăng đó] (http://connect.microsoft.com/VisualStudio/feedback/details/391642/permanently-remove-a-breakpoint-in- visual-studio-in-debugging) – sq33G

+0

"Tốt hơn" cho biết nó là khác nhau; do đó không phải là một bản sao. :) Ngoài ra, nếu câu hỏi này sẽ tạo ra các câu trả lời khác nhau, liệu điều đó cũng không xác nhận tính duy nhất của nó? –

+0

Khi có câu trả lời, chúng tôi sẽ nói chuyện;) – sq33G

Trả lời

2

Đoạn mã sau có thể được sử dụng làm macro để xóa tất cả các điểm ngắt con.

Sub RemoveChildBreakpoints() 
    Dim i As Integer 
    Dim len As Integer 
    Dim debugger As EnvDTE.Debugger = DTE.Debugger 
    Dim children As EnvDTE.Breakpoints 
    For Each bp As EnvDTE.Breakpoint In debugger.Breakpoints 
     children = bp.Children 
     len = children.Count 
     For i = len To 1 Step -1 
      children.Item(i).Delete() 
     Next 
    Next 
End Sub 

Nó vẫn cực kỳ chậm nếu bạn có nhiều điểm ngắt, vì vậy tốt nhất nên chạy thường xuyên nếu bạn gặp sự cố với điểm ngắt trẻ em.

1

Mã sau có thể được sử dụng làm macro để xóa điểm ngắt trên dòng hiện được chọn. (Lưu ý rằng Visual Studio sẽ tự động chọn dòng của điểm ngắt khi nó được nhấn.)

Sub RemoveBreakPoint() 
    Dim debugger As EnvDTE.Debugger = DTE.Debugger 
    Dim children As EnvDTE.Breakpoints 
    Dim sel As Integer = DTE.ActiveDocument.Selection.ActivePoint.Line 
    For Each bp As EnvDTE.Breakpoint In debugger.Breakpoints 
     If bp.File <> DTE.ActiveDocument.FullName Then 
      Continue For 
     End If 
     For Each bpc As EnvDTE.Breakpoint In bp.Children 
      If bpc.FileLine = sel Then 
       bp.Delete() 
       Exit For 
      End If 
     Next 
    Next 
End Sub 

Bạn có thể gán lối tắt bàn phím cho nó để dễ dàng truy cập. (. Tools> Options> Môi trường> Keyboard)

1

Dưới đây là một vĩ mô được cập nhật cho javascript mới dựa vĩ mô add-in (https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio) để loại bỏ tất cả trẻ em breakpoint:

/// <reference path="C:\Users\ERobishaw\AppData\Local\Microsoft\VisualStudio\14.0\Macros\dte.js" /> 
 
try { 
 

 
    var outputWindowPane = dte.Windows.Item("{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}").Object.ActivePane; 
 
    outputWindowPane.Activate(); 
 
    outputWindowPane.OutputString("display this text in the output window panel\n"); 
 

 
    var i; 
 
    var len; 
 
    var dbgr = dte.Debugger; 
 
    var brk = dbgr.Breakpoints; 
 
    outputWindowPane.OutputString("There are " + brk.Count + " Total\n"); 
 
    //Macro.InsertText("There are " + brk.Count + " Total"); 
 
    for (var bpi = 1; bpi <= brk.Count; bpi++) { 
 
     outputWindowPane.OutputString("On " + bpi + " of " + brk.Count + "\n"); 
 
     var bp = brk.Item(bpi); 
 
     var children = bp.Children; 
 
     var len = children.Count; 
 
     
 
     for (var chi = len; chi > 0; chi--) { 
 
      outputWindowPane.OutputString(" Children Count = " + children.Count + "\n"); 
 
      children.Item(chi).Delete(); 
 
     } 
 
    } 
 
} 
 
catch (e) { 
 
    outputWindowPane.OutputString("Error\n"); 
 
    outputWindowPane.OutputString(e + "\n"); 
 
}

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