отладка с помощью указателей в C # - PullRequest
3 голосов
/ 10 марта 2009

Когда я программирую на C / C ++, я часто включаю значения указателя в трассировку. Это помогло соотнести объекты между сообщениями трассировки. В C # у меня нет доступного значения указателя, которое я могу отследить. Есть ли хорошие альтернативы для отслеживаемых идентификаторов объектов ??

Я не знаю, как получить базовый адрес памяти, но даже если бы я это сделал, это не сильно помогло бы, поскольку ГХ мог перемещать объекты.

Ответы [ 3 ]

6 голосов
/ 10 марта 2009

Совет: в Visual Studio вы можете щелкнуть правой кнопкой мыши объект в окне locals / watch и выбрать «Make Object ID», чтобы присвоить объекту уникальный тег.

http://blogs.msdn.com/saraford/archive/2008/09/16/did-you-know-how-to-create-an-object-id-to-keep-track-of-your-objects-314.aspx

2 голосов
/ 10 марта 2009

Добавьте переменную класса, которая увеличивается при каждом вызове конструктора. Присвойте эту переменную класса как свой собственный индекс классу.

class foo
{
  private static int counter;
  private int instance_counter;

  public Foo()
  {
    instance_counter = counter;
    counter++;
  }

  public string toString()
  {
    return "Foo "+instance_counter.toString();
  }
}

может не скомпилироваться из коробки, у меня нет компилятора здесь.

2 голосов
/ 10 марта 2009

Используйте Object.GetHashCode (). Доступ к методу GetHashCode () можно получить из всех объектов, поскольку каждый класс в C # является производным от Object. Но он гарантированно будет уникальным только при вызове Object.GetHashCode (), а его результат каким-то образом используется для генерации хеш-кодов для пользовательских классов. Обратите внимание, что это не является абсолютной гарантией, что вы все равно можете получить один и тот же хэш-код для более чем одного объекта.

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