查找指向Visual Studio中相同内存的所有变量

时间:2009-10-26 13:59:35

标签: .net visual-studio-2008 debugging pointers reference

在Visual Studio 2008中,有没有办法找到指向与另一个变量相同的对象的所有变量?

因此,在下面的示例中,我想知道ref1ref2都指向与original相同的对象。

var original = new List<string>() { "Some Data" };
var ref1 = original;
var ref2 = ref1;

基本上我希望能够在内存中的所有变量上调用ReferenceEquals(),然后查看所有相等的变量。除了我希望能够在VS2008 IDE中执行此操作。

3 个答案:

答案 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)。