Csharp/C#教程:如何在C#中在运行时跟踪变量?分享


如何在C#中在运行时跟踪变量?

如何在运行时在C#中更改变量的值? 我对调试器在通过执行步骤跟踪变量时提供的function感兴趣,只是我需要从代码中调用它。 某种键值观察,但对于各种变量(局部,类,静态等),不仅仅是属性。 因此,基本上,当变量的值发生变化时会收到通知。

您正在假设调试器可以跟踪变量。 它不能。

对于非托管代码,处理器可以使用专用的调试寄存器来设置数据断点。 最多提供三个。 当它看到特定的内存位置被写入时,它会生成硬件中断。 但是,这个非常有用的function在托管代码中不可用。 垃圾收集器与它完全不兼容,它会移动对象,给它们另一个地址。

托管调试器支持断点上的“命中时”条件,允许您将信息转储到输出窗口。 然而,这需要断点,它不能由变量值的变化触发。 它实际上也减慢了代码执行速度,因为调试器在执行条件之前实际上进入了中断状态。

放置这样一个断点的显而易见的地方是属性设置器。 您需要在代码中实现此function。 例如,您可以使用Trace类在该setter中执行任何操作。

要添加Marc所说的内容,如果要对许多属性和方法执行此操作,可能需要查看面向方面的编程技术和PostSharp等库。

https://www.sharpcrafters.com/postsharp

托管调试器几乎可以使用ICorDebug COM API。 您感兴趣的部分是ICorDebugValue及其后代。 请注意,很多调试API要求进程不运行(即遇到断点),以便进行各种检查。 ICorDebug高级概述就在这里 。 关于它的文档有点稀疏,但一些谷歌搜索可能会有所帮助。 祝好运。

没有调试器你唯一明智的方法就是:不要使用变量,而是使用属性,并且(可能有条件地)将跟踪添加到setter:

 private int myValue; public int MyValue { get {return myValue;} set { SomeTraceMethod(myValue, value, ...); myValue = value; } } 

显然,这不能用于任意字段/变量。

正如其他人提到的那样,在使用属性时,这种机制才有意义。 在.NET中,您可以使用INotifyPropertyChanged接口。

有关如何实现它的示例,请参阅

如何:实现INotifyPropertyChanged接口

引用的文章明确谈到了Windows窗体,但您并没有这样做(该接口实际上是在System.dll的System.ComponentModel命名空间中声明的)。 实际上,该接口广泛用于数据绑定场景,例如在WPF中。

上述就是C#学习教程:如何在C#中在运行时跟踪变量?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1017902.html

(0)
上一篇 2022年1月3日
下一篇 2022年1月3日

精彩推荐