Найти все переменные, которые указывают на одну и ту же память в Visual Studio - PullRequest
0 голосов
/ 26 октября 2009

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

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

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

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

Ответы [ 3 ]

1 голос
/ 25 декабря 2009

Вы можете сделать это, используя расширение SOS Debugging! DumpStackObjects. (Я использую WinDbg, но вы также можете загрузить расширение в VS из окна Immediate)

Эта команда выведет все объекты стека в следующем формате:

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 местоположений стека указывают на одну и ту же ссылку на объект.

1 голос
/ 26 октября 2009

Похоже, вы могли бы извлечь выгоду из профилировщика памяти. Я бы порекомендовал Red-Gates:

http://www.red -gate.com / продукция / ants_memory_profiler / index_v2.htm

0 голосов
/ 10 марта 2010

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

Если вы наводите курсор на переменную во время отладки, щелкните правой кнопкой мыши всплывающую подсказку и выберите «Создать идентификатор объекта»

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...