Visual Studio有一个名为“Step over properties and operators(Managed only)”的调试设置。这个设置非常有用,我通常会打开它。
现在每隔一段时间,项目中就会有一个属性设置器/获取器,这是相当复杂的,在调试时我希望能够进入它。有没有办法用属性装饰这个属性,以便调试器忽略上面提到的属性设置,并允许我进入它?
基本上,它应该与DebuggerStepThroughAttribute相反。
还是有另一种方法可以达到这个目的吗?我目前所做的是在跳过它之前在属性getter / setter中设置一个断点,但这不是很方便,因为它要求我在每次单步执行特定代码片段时添加/删除断点。
修改:评论提示重构。但这并不能真正回答我的问题,在我的案例中并不是必需的。通过“涉及”我并不意味着许多代码或一些资源密集型代码。在我的例子中,属性设置器触发对象内部的计算(O(1)复杂度,大约2毫秒)。但是,这个计算并不那么明显,我偶尔会想通过按下步骤键来进入属性设置器。
答案 0 :(得分:3)
嗯,要做到这一点,您需要一种方法来了解调试器是处于运行模式还是逐步模式。遗憾的是,您没有在申请中获得此信息。
相反,我写了一个简单的宏:
dte.Debugger.ExecuteStatement('AppDomain.CurrentDomain.SetData("Stepping", "True")');
dte.Debugger.StepOver();
dte.Debugger.ExecuteStatement('AppDomain.CurrentDomain.SetData("Stepping", null)');
你必须安装宏加载项 - 它是微软的加载项,所以不用担心。
这允许您使用简单的条件断点:
AppDomain.CurrentDomain.GetData("Stepping") != null
(如果你愿意的话,使用宏也可以很容易地创建断点)
现在,您不必使用通常的Step Over命令,而只需运行宏,它将在给定条件的每个断点处自动中断:)
应该可以将快捷方式(和菜单命令)附加到宏,但由于某种原因,这对我不起作用。如果这对你来说是一个问题,你可以随时制作一个VSPackage(现在很简单,但是你必须安装Visual Studio SDK),并使用几乎相同的代码,除了C#而不是JavaScript:)
请注意,这假设您使用的是VS2012 + - 在早期版本中,您可以以相同的方式简单地使用内置宏。这意味着将代码翻译成VB,但是......