2009-10-26 1 views
0

В Visual Studio 2008 есть способ найти все переменные, которые указывают на тот же объект, что и на другую переменную?Найти все переменные, указывающие на одну и ту же память в Visual Studio

Итак, в приведенном ниже примере я хотел бы узнать, что ref1 и ref2 оба указывают на тот же объект, что и original.

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

По существу я хочу, чтобы иметь возможность вызвать ReferenceEquals() все переменные в памяти, а затем увидеть все те, которые равны. Кроме того, я хочу иметь возможность сделать это в VS2008 IDE.

+2

Вы можете указать язык, который используете. – Alexandru

+2

C#, довольно очевидно. – Joey

+0

Я думал, что это был язык агностик, поскольку его вопрос об отладке в Visual Studio. Но Йоханнес прав, я использую C#. –

ответ

0

Я только что нашел способ добиться того, чего хотел, и его всех испекли в VS2008.

При наведении курсора на переменную, а вы отладки, щелкните правой кнопкой мыши на подсказке и выберите «Make Object ID»

Это дает, что объект идентификатор (# 1), который появляется в подсказке. Поэтому, если у вас есть другая переменная, указывающая на один и тот же объект, она будет иметь тот же идентификатор (# 1).

1

Вы можете сделать это с помощью команды внутреннего абонента SOS DEBUGGING в 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 позиций стека указывают на одну и ту же ссылку на объект.