Visual Studio断点以堆栈状态为条件

时间:2012-01-25 16:25:49

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

Visual Studio可以在断点命中时打印调用堆栈,并且可以在满足条件时停止,是否有任何方法可以组合它并在从另一个选定的函数调用函数时停止,并忽略所有其他调用?

2 个答案:

答案 0 :(得分:4)

我认为唯一的方法是使用宏。右键单击断点,选择“When Hit ..”,选择“Run a macro”,然后将其指向一个类似于以下内容的宏:

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

......并完成它。

答案 1 :(得分:3)

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

这是一个很好的资源:Mastering Debugging in Visual Studio 2010 - A Beginner's Guide