Я много лет работаю с отладчиком VS, но время от времени я сталкиваюсь с той особенностью, которую я никогда раньше не замечал, и думаю: "Черт, как я мог это пропустить?" so полезно! "
[Отказ от ответственности: эти советы работают в VS 2005 на проекте С#, не гарантируют более старые воплощения VS или других языков]
Отслеживать экземпляры объектов
Работа с несколькими экземплярами данного класса? Как вы можете рассказать им обособленно? В дни программирования, посвященные сбору мусора, было легко отслеживать ссылки - просто посмотрите на адрес памяти. С .NET вы не можете этого сделать - объекты могут перемещаться. К счастью, просмотр часов позволяет вам щелкнуть правой кнопкой мыши на часах и выбрать "Сделать идентификатор объекта".
просмотр часов http://img403.imageshack.us/img403/461/52518188cq3.jpg
Это добавляет {1 #}, {2 #} и т.д. после значения экземпляра, эффективно давая экземпляру уникальный ярлык. Это выглядит так:
пронумерованный экземпляр http://img383.imageshack.us/img383/7351/11732685bl8.jpg
Метка сохраняется для времени жизни этого объекта.
Значимые значения для наблюдаемых переменных
По умолчанию наблюдаемое значение переменной - это тип. Если вы хотите увидеть его поля, вы должны расширить его, и это может занять много времени (или даже тайм-аут!), Если есть много полей или они что-то осложняют.
Однако некоторые предопределенные типы отображают более значимую информацию:
- Строки
- показывают их фактическое содержимое.
- списки и словари показывают их количество элементов и т.д.
содержательная информация http://img205.imageshack.us/img205/4808/37220487md1.jpg
Было бы неплохо иметь это для моих собственных типов?
Хм...
... некоторое время с .NET Reflector показывает, как легко это можно выполнить с помощью атрибута DebuggerDisplay
в моем настраиваемом типе:
[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
public string Name { get { ... } }
...
}
... повторно запустить и...
Здесь гораздо больше информации по этому вопросу: MSDN
Перерыв во всех исключениях
... даже те, которые обрабатываются в коде! Я знаю, я такой n00b за то, что не знал об этом с тех пор, как родился, но здесь все равно - может быть, это когда-нибудь поможет кому-нибудь:
Вы можете заставить отлаживаемый процесс входить в режим отладки каждый раз, когда генерируется исключение. Когда-нибудь часами хватало на поиски ошибок, чтобы встретить такую часть кода?
try {
runStrangeContraption();
} catch(Exception ex) {
/* TODO: Will handle this error later */
}
В этих случаях очень удобно находить все исключения. Это можно активировать из Debug > Exceptions... (Ctrl-Alt-E). Установите флажки в столбце "Брошенный" для каждого типа исключения, которое вам нужно.
Это были несколько моментов для меня на лбу. Не могли бы вы поделиться своим?