.NET:强制调试器进入属性的属性

时间:2014-02-11 21:27:05

标签: c# .net visual-studio debugging

Visual Studio有一个名为“Step over properties and operators(Managed only)”的调试设置。这个设置非常有用,我通常会打开它。

现在每隔一段时间,项目中就会有一个属性设置器/获取器,这是相当复杂的,在调试时我希望能够进入它。有没有办法用属性装饰这个属性,以便调试器忽略上面提到的属性设置,并允许我进入它?

基本上,它应该与DebuggerStepThroughAttribute相反。

还是有另一种方法可以达到这个目的吗?我目前所做的是在跳过它之前在属性getter / setter中设置一个断点,但这不是很方便,因为它要求我在每次单步执行特定代码片段时添加/删除断点。

修改:评论提示重构。但这并不能真正回答我的问题,在我的案例中并不是必需的。通过“涉及”我并不意味着许多代码或一些资源密集型代码。在我的例子中,属性设置器触发对象内部的计算(O(1)复杂度,大约2毫秒)。但是,这个计算并不那么明显,我偶尔会想通过按下步骤键来进入属性设置器。

1 个答案:

答案 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,但是......