2011-11-03 11 views
10

Estoy depurando un sitio web ASP.NET con C# en Visual Studio. Cuando establezco un punto de interrupción (durante la depuración), con el tiempo, el punto de interrupción creado acumulará muchos puntos de interrupción secundarios. (Consulte here.)
Ahora, a veces, cuando elimino un punto de interrupción haciendo clic en el glifo rojo, el punto de interrupción seguirá sonando la próxima vez que se ejecute la línea, porque los puntos de interrupción secundarios persistieron.¿Deshabilita/elimina puntos de interrupción secundarios?

Eliminar el punto de interrupción en la ventana de punto de interrupción resolverá el problema, pero es molesto encontrar los puntos de interrupción correctos cuando tiene muchos conjuntos. Además, la eliminación de un punto de interrupción con muchos niños es una operación bastante lenta.

Entonces, para llegar a la pregunta, ¿puedo deshabilitar esta creación de puntos de interrupción secundarios, o existe alguna forma de eliminar rápidamente todos los elementos secundarios?
¡Se agradecen las soluciones alternativas!


Tenga en cuenta que esto no es un duplicado de esto: Question on how to remove a Visual Studio Breakpoint, porque estoy preguntando cómo lidiar con los puntos de interrupción secundarios. (Aunque nuestro objetivo previsto es el mismo.)

+0

Mmmm, ¿Por qué estás tan seguro de que tu pregunta no es un duplicado? Me parece que tienes una mejor idea de cómo hacer la pregunta. En cualquier caso, su respuesta está definitivamente en la [página de Microsoft Connect ref'd por esa publicación] (http://connect.microsoft.com/VisualStudio/feedback/details/391642/permanently-remove-a-breakpoint-in- visual-studio-during-depuración) – sq33G

+0

"Mejor" indica que es diferente; por lo tanto no es un duplicado. :) Además, si esta pregunta generara respuestas diferentes, ¿eso tampoco validaría su singularidad? –

+0

Cuando hay respuestas, hablaremos;) – sq33G

Respuesta

2

El siguiente código se puede utilizar como macro para eliminar todos los puntos de interrupción secundarios.

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 

Todavía es increíblemente lento si tiene muchos puntos de interrupción, así que lo mejor es hacerlo funcionar sobre una base regular si usted está teniendo un problema con los puntos de corte del niño.

1

El siguiente código se puede utilizar como una macro para eliminar el punto de interrupción en la línea seleccionada actualmente. (Tenga en cuenta que Visual Studio selecciona automáticamente la línea de un punto de ruptura cuando es golpeado.)

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 

se puede asignar una combinación de teclas a la misma para facilitar el acceso. (. Herramientas> Opciones> Entorno> Teclado)

1

Aquí está una macro actualizada para la nueva macro JavaScript complemento (https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio) con base para eliminar todos los niños puntos de interrupción:

/// <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"); 
 
}

Cuestiones relacionadas