Visual Studio Point point conditionnel sur l'état de la pile
-
14-11-2019 - |
Question
Visual Studio peut imprimer la pile d'appels lorsque Breakpoint est frappé, et peut s'arrêter lorsque les conditions sont remplies, existe-t-il un moyen de combiner cela et de s'arrêter lorsque la fonction est appelée à partir d'un autre sélectionné, et d'ignorer tous les autres appels?
La solution
Je crois que la seule façon de le faire est avec une macro. Cliquez avec le bouton droit sur votre point d'arrêt, choisissez "Lorsque vous appuyez sur ..", sélectionnez "Exécuter une macro" et indiquez-le vers une macro qui ressemble à quelque chose comme:
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
Ce qui précède est la moitié du code PSUedo; Je ne l'ai pas vraiment testé, mais je devrais travailler avec quelques modifications mineures.
Notez que ce sera lent comme l'enfer si le point d'arrêt est touché souvent, car la diffusion de macros de points d'arrêt est intrinsèquement très lent.
BTW, si vous posiez des questions sur .NET / C #, cela aurait été beaucoup plus simple, vous auriez pu faire un point de rupture conditionnel sur
new System.Diagnostics.StackTrace().ToString().Contains("SomeOtherMethodsName")
... et en finir avec.
Autres conseils
Pas sûr, mais vous pourriez être en mesure de filtrer ou de conditions, bien qu'il soit plus facile de simplement mettre le point d'arrêt du processus d'appel à la place
Ceci est une bonne ressource: Mastering Debugging in Visual Studio 2010 - A débutant's Guide