Визуальная точка останова в зависимости от состояния стека - PullRequest
11 голосов
/ 25 января 2012

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

Ответы [ 2 ]

4 голосов
/ 25 января 2012

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

 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

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

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

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

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

... и покончим с этим.

3 голосов
/ 25 января 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...