Отладка с помощью указателей в C#

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

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

3 ответа

Решение

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

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

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

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

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

Совет: внутри 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

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

Другие вопросы по тегам