在 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 确实支持条件断点。一种选择是:
- 在您感兴趣的 class 上的所有方法上放置断点
- 调试你的代码直到第一个被命中
- 找到实例的HashCode
- 在
GetHashCode() == the hash code you previously retrieved
上设置所有断点条件
- 让应用程序运行一直运行直到再次命中断点
- 查看调用堆栈window 以查看哪一行代码正在调用您的方法
有点笨拙,但会工作...
有没有办法在调试时跟踪 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 确实支持条件断点。一种选择是:
- 在您感兴趣的 class 上的所有方法上放置断点
- 调试你的代码直到第一个被命中
- 找到实例的HashCode
- 在
GetHashCode() == the hash code you previously retrieved
上设置所有断点条件
- 让应用程序运行一直运行直到再次命中断点
- 查看调用堆栈window 以查看哪一行代码正在调用您的方法
有点笨拙,但会工作...