Вопрос

Visual Studio может печатать стек вызова при попадании точки останова, и может остановиться, когда условия будут выполнены, есть ли способ комбинировать это и остановиться, когда функция вызывается из другого выбранного, и игнорировать все другие вызовы?

Это было полезно?

Решение

Я верю, что единственный способ сделать это с макросом.Щелкните правой кнопкой мыши «Ваша точка останова», выберите «Когда нажмите ..», Выберите «Запустите макрос» и укажите его на макрос, который идет что-то вроде:

 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
.

Выше находится в половине PSuedo код;Я на самом деле не проверил его, но должен работать с некоторыми незначительными изменениями.

Обратите внимание, что это будет медленным, если черт возьми, если точка останова ударится много раз, потому что работает макрос из точек останова, по своей природе очень Slow.

Кстати, если бы вы спрашивали о .NET / C # Это было бы намного проще, вы могли бы только сделать условный точку останова на

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

... и сделать с ним.

Другие советы

Не уверен, но вы сможете с фильтрацией или условиями, хотя возможно, что может быть проще просто поместить точку останова в процессе вызова

Это хороший ресурс: Освоение отладки в Visual Studio 2010 - руководство для начинающих

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top