gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:31:25 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com