Domanda

Visual Studio è in grado di stampare la pila di chiamata quando colpire il punto di interruzione, e può fermarsi quando le condizioni sono soddisfatte, è presente alcun modo per combinare e interrompere quando la funzione viene chiamata da un altro selezionato e ignora tutte le altre chiamate?

È stato utile?

Soluzione

Credo che l'unico modo per farlo sia con una macro.Fare clic con il tasto destro del mouse, scegli "Quando colpisci ..", seleziona "Esegui una macro" e puntare a una macro che va come:

 Sub ContinueUnlessCalledFromRightContext()
    For Each frame As EnvDTE.StackFrame In DTE.Debugger.CurrentThread.StackFrames
        If (frame.FunctionName.Contains("SomeOtherMethodsName") Then Exit Function
    Next

    DTE.Debugger.Go() ` we weren't called from the right context so continue execution.
End Sub
.

Quanto sopra è mezzo codice Psuedo;L'ho effettivamente testato, ma dovrebbe funzionare con alcune modifiche minori.

Nota che questo sarà lento come diavolo se il punto di interruzione viene colpito un sacco di volte, perché eseguire macro da breakpoint è intrinsecamente molto lento.

btw, se stavi chiedendo di .net / c # sarebbe stato molto più semplice, potresti aver appena fatto un punto di interruzione condizionale su

new System.Diagnostics.StackTrace().ToString().Contains("SomeOtherMethodsName")
.

... ed essere fatto con esso.

Altri suggerimenti

Non sono sicuro, ma potresti essere in grado di filtrare o con condizioni, anche se potrebbe essere più facile mettere il punto di interruzione del processo di chiamata

Questa è una buona risorsa: Mastering Debug in Visual Studio 2010 - Una Guida per principianti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top