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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top