2012-01-25 24 views
9

Visual Studio puede imprimir la pila de llamadas cuando golpea el punto de interrupción y puede detenerse cuando se cumplen las condiciones. ¿Hay alguna manera de combinar eso y parar cuando se llama a la función desde otra seleccionada, e ignorar todo otras llamadas?Visual Studio breakpoint condicional en el estado de pila

Respuesta

4

creo la única forma de hacerlo es con una macro. Haga clic derecho en el punto de interrupción, elegir la opción "Cuando Hit ..", seleccione "Ejecutar una macro", y el punto a una macro que dice algo como:

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 

El código anterior es la mitad pseudo; En realidad, no lo probé, pero debería funcionar con algunas ediciones menores.

Tenga en cuenta que esto será lento como el infierno si el punto de interrupción se golpea muchas veces, porque ejecutar macros desde puntos de interrupción es inherentemente muy lento.

Por cierto, si usted preguntaba sobre .NET/C# que hubiera sido mucho más simple, que podría acaba de hacer un punto de interrupción condicionada a

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

... y hacerse con él.

+2

Nota del futuro: [las macros no existen en las versiones actuales de Visual Studio] (https://social.msdn.microsoft.com/Forums/vstudio/en-US/d8410838-085b-4647-8c42-e31b669c9f11/macros -in-visual-studio-11-developer-preview? forum = vsx). Estoy abierto a cualquier sugerencia para hacer lo que OP pidió en VS2013 y posterior. –

3

No es seguro, pero que podría ser capaz de, ya sea con o filtrado de condiciones, aunque podría ser más fácil simplemente poner el punto de interrupción en el proceso de llamada en lugar

Este es un buen recurso: Mastering Debugging in Visual Studio 2010 - A Beginner's Guide

+0

establecer el punto de interrupción en la persona que llama no es conveniente en mi caso, tendré que establecer varios puntos de interrupción, y también quiero condicionarme en más de un nivel de pila. – Vasaka

Cuestiones relacionadas