【问题标题】:Visual studio breakpoint conditional on the stack stateVisual Studio 断点以堆栈状态为条件
【发布时间】:2012-01-25 16:25:48
【问题描述】:

Visual Studio 可以在断点命中时打印调用堆栈,并且可以在满足条件时停止,有没有办法将其结合起来并在从另一个选定的函数调用时停止,并忽略所有其他调用?

【问题讨论】:

    标签: c++ visual-studio debugging conditional-breakpoint


    【解决方案1】:

    我相信做到这一点的唯一方法是使用宏。右键单击断点,选择“当命中时..”,选择“运行宏”,然后将其指向类似于以下内容的宏:

     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")
    

    ...然后就完成它。

    【讨论】:

    【解决方案2】:

    不确定,但您可能可以使用过滤或条件,但将断点放在调用进程上可能更容易

    这是一个很好的资源:@​​987654321@

    【讨论】:

    • 在调用者上设置断点在我的情况下并不方便,我必须设置几个断点,而且我想在不止一个堆栈级别上设置条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多