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