Breakpoint Visual Studio condizionale sullo stato dello stack
-
14-11-2019 - |
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?
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