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

标签 c# .net visual-studio debugging

Visual Studio 有一个名为“跳过属性和运算符(仅限托管)”的调试设置。此设置非常有用,我通常将其打开。

现在每隔一段时间,项目中就会有一个属性setter/getter,比较复杂,在调试的时候希望能够介入其中。有没有办法用一个属性来装饰这个属性,以便调试器忽略提到的属性设置并允许我进入它?

基本上,它应该执行 DebuggerStepThroughAttribute 的逆操作.

或者有其他方法可以实现吗?我目前所做的是在跨过它之前在属性 getter/setter 中设置一个断点,但这不是很方便,因为它需要我在每次跨过特定代码片段时添加/删除断点。

编辑:评论建议重构。但这并不能真正回答我的问题,而且在我的情况下也没有必要。我所说的“涉及”并不是指很多代码或一些资源密集型代码。在我的例子中,属性 setter 触发了对象内部的计算(O(1) 复杂度,大约两毫秒)。但是,该计算并不是那么明显,并且每隔一段时间我都想通过按步进键来步进属性 setter 。

最佳答案

好吧,要做到这一点,您需要一种方法来了解调试器是处于运行模式还是单步执行模式。遗憾的是,您无法在应用程序中获取此信息。

因此,我编写了一个简单的宏:

dte.Debugger.ExecuteStatement('AppDomain.CurrentDomain.SetData("Stepping", "True")');
dte.Debugger.StepOver();
dte.Debugger.ExecuteStatement('AppDomain.CurrentDomain.SetData("Stepping", null)');

您必须安装宏加载项 - 它是 Microsoft 提供的,所以不用担心。

这允许您使用一个简单的条件断点:

AppDomain.CurrentDomain.GetData("Stepping") != null

(如果你愿意,使用宏也很容易制作断点)

现在,您不必使用通常的 Step Over 命令,只需运行宏,它就会自动在给定条件下的每个断点处中断 :)

应该可以将快捷方式(和菜单命令)附加到宏,但出于某种原因,这对我不起作用。如果这对你来说是个问题,你总是可以制作一个 VSPackage(现在这很简单,但你必须安装 Visual Studio SDK),并使用几乎相同的代码,除了在 C# 中而不是 JavaScript :)

请注意,这假设您使用的是 VS2012+ - 在早期版本中,您可以简单地以相同的方式使用内置宏。当然,这意味着将代码转换为 VB,但是......

关于c# - .NET:强制调试器进入属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21713385/

相关文章:

c# - Entity Framework 多对多插入正常,但更新不正确

c# - 在单独的线程中延迟编译 .NET 正则表达式

c# - 为什么我可以将空条件运算符应用于硬编码字符串?

c++ - 编译一段最简单的代码时,VC++ 编译器崩溃

.net - Azure 函数发布失败错误消息

c# - 在转换为 SQL 之前在 C# 中评估的 LINQ 查询?

c# - 将日期从 visual basic 转换为 c-sharp

c# - ArgumentException 标识符 ' ' 不符合 CLS。关于连载

c# - 为什么要实现 IDisposable 以仅清理非托管资源?

visual-studio - _Choose Toolbox Items_Visual Studio 2013 中缺少 SSIS 数据流项和 SSIS 控制流项选项卡