2012-01-25 110 views

回答

4

我相信唯一的办法就是用宏。右键点击您的断点,选择“当打..”,选择“运行宏”,并将其指向的是那张有点像宏:

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

来自未来的说明:[宏在当前版本的Visual Studio中不存在](https://social.msdn.microsoft.com/Forums/vstudio/en-US/d8410838-085b-4647-8c42-e31b669c9f11/macros -in视觉工作室-11开发者预览?论坛= VSX)。 我接受任何关于做什么OP在VS2013及以后问的建议。 –

3

不知道,但你也许可以用任何过滤或条件,虽然它可能会更容易只是把断点调用进程,而不是

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

+0

在我的情况下在调用者上设置断点并不方便,我将不得不设置几个断点,并且我想在多于一个堆栈级别上设置条件。 – Vasaka