2011-11-03 11 views
10

Sto eseguendo il debug di un sito Web ASP.NET con C# in Visual Studio. Quando imposto un punto di interruzione (durante il debug), nel tempo, il punto di interruzione creato accumulerà molti punti di interruzione figlio. (Vedere here.)
Ora, a volte quando rimuovo un punto di interruzione facendo clic sul glifo rosso, il punto di interruzione verrà comunque colpito alla successiva esecuzione della riga, poiché i punti di interruzione figlio persistono.Disabilita/rimuovi punti di interruzione figlio?

La rimozione del punto di interruzione nella finestra del punto di interruzione risolverà il problema, ma è fastidioso trovare il punto di interruzione corretto quando si dispone di molti set. Inoltre, la rimozione di un punto di interruzione con molti bambini è un'operazione piuttosto lenta.

Quindi, per raggiungere la domanda, posso disabilitare questa creazione di punti di interruzione figlio o esiste un modo per rimuovere rapidamente tutti i bambini?
Soluzioni alternative sono apprezzate!


Si prega di notare che questo non è un duplicato di questo: Question on how to remove a Visual Studio Breakpoint, perché sto chiedendo come affrontare i punti di interruzione figlio. (Sebbene il nostro obiettivo sia lo stesso.)

+0

Mmmm, perché sei così sicuro che la tua domanda non è un duplicato? Mi sembra che tu abbia appena avuto un'idea migliore su come porre la domanda. In ogni caso, la tua risposta è sicuramente sulla [pagina Microsoft Connect rifatta da quel post] (http://connect.microsoft.com/VisualStudio/feedback/details/391642/permanently-remove-a-breakpoint-in- visual-studio-during-debugging) – sq33G

+0

"Better" indica che è diverso; quindi non un duplicato. :) Inoltre, se questa domanda generasse risposte diverse, non convaliderebbe anche la sua unicità? –

+0

Quando ci sono risposte, ne parliamo;) – sq33G

risposta

2

Il seguente codice può essere utilizzato come macro per rimuovere tutti i punti di interruzione figlio.

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 

E 'ancora follemente lento se si hanno molti punti di interruzione, quindi è meglio farlo funzionare in maniera regolare, se hai un problema con i punti di interruzione del bambino.

1

Il seguente codice può essere utilizzato come macro per rimuovere il punto di interruzione sulla linea attualmente selezionata. (Si noti che Visual Studio seleziona automaticamente la linea di un punto di interruzione quando viene colpito.)

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 

È possibile assegnare una scorciatoia da tastiera ad esso per un facile accesso. (. Strumenti> Opzioni> Ambiente> Tastiera)

1

Ecco una macro aggiornata per il nuovo JavaScript basato macro add-in (https://marketplace.visualstudio.com/items?itemName=VisualStudioPlatformTeam.MacrosforVisualStudio) per rimuovere tutti i bambini Punti di arresto:

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

Problemi correlati