在 C# 中跟踪实例?

Track an instance in C#?

有没有办法在调试时跟踪 Visual Studio 中 C#/.NET 中的单个实例?我发现它有时真的很有用。

另一种看待它的方式是实例上的断点而不是代码上的断点。因此,每次访问我的实例时 and/or 修改了执行停止,我会看到 accesses/modifies 我的实例的代码行。

在 C++ 中,等效项是监视实例所在的内存片段,或者只是指向实例的指针。这种方法不适用于托管代码,因为 .NET 中的对象会四处移动,因此我需要 C++ 中指针的等效项。

我知道 C# 中的 WeakReferences,但我不确定它们在调试时是否有用?

编辑1: 这个问题与 "When debugging, is there a way to tell if an object is a different instance? " 不同,因为我对比较两个引用不感兴趣,但我想访问单个对象。

添加手表,像这样: https://msdn.microsoft.com/en-us/library/0taedcee.aspx

TLDNR:突出显示要观察的变量或表达式,然后右键单击并从上下文菜单中选择 "Add to Watch"。然后这个变量就会在"Watch"window里面供你观察。

当您逐步执行代码时,当值发生变化时,表达式应该变为红色。

我不知道开箱即用,但 VS 确实支持条件断点。一种选择是:

  1. 在您感兴趣的 class 上的所有方法上放置断点
  2. 调试你的代码直到第一个被命中
  3. 找到实例的HashCode
  4. GetHashCode() == the hash code you previously retrieved
  5. 上设置所有断点条件
  6. 让应用程序运行一直运行直到再次命中断点
  7. 查看调用堆栈window 以查看哪一行代码正在调用您的方法

有点笨拙,但会工作...