Pergunta

O Visual Studio pode imprimir a pilha de chamadas quando o ponto de interrupção é atingido e pode parar quando as condições são atendidas. Existe alguma maneira de combinar isso e parar quando a função é chamada de outra selecionada e ignorar todas as outras chamadas?

Foi útil?

Solução

Acredito que a única maneira de fazer isso é com uma macro.Clique com o botão direito no seu ponto de interrupção, escolha "Quando Hit..", selecione "Executar uma macro" e aponte para uma macro que seja 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

O texto acima é meio código psuedo;Na verdade, não testei, mas devo trabalhar com algumas pequenas edições.

Observe que isso será muito lento se o ponto de interrupção for atingido muitas vezes, porque a execução de macros a partir de pontos de interrupção é inerentemente muito lento.

Aliás, se você estivesse perguntando sobre .NET/C#, teria sido muito mais simples, você poderia simplesmente ter feito um ponto de interrupção condicional em

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

...e pronto.

Outras dicas

Não tenho certeza, mas você pode ser capaz de filtrar ou condições, embora possa ser mais fácil colocar o ponto de interrupção no processo de chamada em vez disso

Este é um bom recurso: Dominando a depuração no Visual Studio 2010 - um guia de iniciante

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top