在Visual Studio 2008中,有没有办法找到指向与另一个变量相同的对象的所有变量?
因此,在下面的示例中,我想知道ref1
和ref2
都指向与original
相同的对象。
var original = new List<string>() { "Some Data" };
var ref1 = original;
var ref2 = ref1;
基本上我希望能够在内存中的所有变量上调用ReferenceEquals()
,然后查看所有相等的变量。除了我希望能够在VS2008 IDE中执行此操作。
答案 0 :(得分:1)
听起来你可以从内存分析器中受益。我会推荐Red-Gates:
http://www.red-gate.com/products/ants_memory_profiler/index_v2.htm
答案 1 :(得分:1)
您可以使用SOS调试扩展的!DumpStackObjects命令来完成此操作。 (我正在使用WinDbg,但你也可以从立即窗口加载扩展到VS)
此命令将按以下格式转储所有堆栈对象:
RSP/REG Object Name
000000000028ef70 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efa0 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efa8 0000000002823a68 System.String
000000000028efb0 0000000002823a68 System.String
000000000028efc0 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efc8 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efd0 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efd8 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028efe0 0000000002823a98 System.Collections.Generic.List`1[[System.String, mscorlib]]
000000000028f000 0000000002823a48 System.Object[] (System.String[])
000000000028f188 0000000002823a48 System.Object[] (System.String[])
000000000028f370 0000000002823a48 System.Object[] (System.String[])
000000000028f398 0000000002823a48 System.Object[] (System.String[])
在此示例中,您可以看到7个堆栈位置指向同一个对象引用。
答案 2 :(得分:0)
我刚刚找到了实现我想要的方法,而且它全部都融入了VS2008。
如果您在调试时将鼠标悬停在变量上,请右键单击工具提示并选择“制作对象ID”
这使该对象成为工具提示中出现的id(#1)。因此,如果您有另一个指向同一对象的变量,它将具有相同的ID(#1)。