"Скрытые секреты" отладчика Visual Studio.NET?

Насколько мне вообще не нравятся дискуссионные/субъективные посты на SO, я действительно понял, что "Скрытые секреты" собирают сообщения, которые люди собрали вместе. Они дают большой обзор некоторых обычно пропущенных инструментов, которые вы теперь можете обнаружить.

Для этого вопроса я хотел бы изучить отладчик Visual Studio.NET. Каковы некоторые из "скрытых секретов" в отладчике VS.NET, которые вы используете часто или недавно обнаружили и хотите, чтобы вы давно знали?

Ответ 1

Одна из моих любимых функций - опция "When Hit..." , доступная в точке останова. Вы можете распечатать сообщение со значением переменной вместе с большим количеством другой информации, например:

  • $ADDRESS - Текущая инструкция
  • $CALLER - Предыдущее имя функции
  • $CALLSTACK - Стек вызовов
  • $FUNCTION - Текущее имя функции
  • $PID - Идентификатор процесса
  • $PNAME - Имя процесса
  • $TID - идентификатор темы
  • $TNAME - Название темы

Вы также можете запустить макрос, но я никогда не использовал эту функцию.

Ответ 2

Для приложений .net System.Diagnostics есть много полезных отладочных вещей. Класс Debugger, например:

Debugger.Break(); // Programmatically set a break point
Debugger.Launch(); // Launch the debugger if not already attached
Debugger.IsAttached // Check if the debugger is attached

System.Diagnostics также имеет много хороших атрибутов. Два из них, которые я использовал, - это атрибут отображения отладчика для изменения деталей, помещенных в окно locals, и атрибут перехода через пропущенный код, который вам не нужен для отладки:

// Displays the value of Property1 for any "MyClass" instance in the debugger
[DebuggerDisplay("{Property1}")]
public class MyClass {
    public string Property1 { get; set; }

    [DebuggerStepThrough]
    public void DontStepInto() {
       // An action we don't want to debug
    }
}

Ответ 3

Вы можете щелкнуть правой кнопкой мыши объект в окне "Часы" и нажать "Сделать идентификатор объекта".

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

Ответ 4

Как веб-разработчик, который работает с веб-службами, которые находятся в пределах того же самого решения, что и мой внешний код, большую часть времени я нашел возможность "прикрепить" к процессу, чтобы быть ОГРОМНОЙ экономии времени.

Прежде чем я нашел этот скрытый камень, мне всегда нужно было установить точку останова на каком-то внешнем коде, который называется методом веб-службы, и в него входить. Теперь, когда я знаю об этом трюке/функции, я могу легко установить точки останова на любой части моего кода, который я хочу, чтобы сэкономить массу времени и усилий.

Ответ 5

$exception в окне просмотра будет отображаться исключение, которое в настоящее время обрабатывается, даже если у вас нет catch, который присваивает экземпляр Exception именованной переменной.

Ответ 6

  • Окно тем, из Debug → Windows → Threads. Вы можете замораживать и оттаивать потоки и переключать активный поток. Это потрясающе при отладке или репликации проблемы с помощью многопоточного приложения.
  • Вы можете перетащить желтую стрелку "Следующее выражение" в другое место. Когда программа возобновится, она возобновит выполнение в этом заявлении. Вы можете добавить его на панель инструментов, синюю стрелку, называемую Set Next Statement, но она по умолчанию отсутствует.
  • Вы можете "отменить" навигацию, которую вы сделали, например, прокрутку, переход в другой файл или переключение на ссылку. Ярлык ctrl-- (control минус.) Таким образом вы можете перейти в функцию, проверить там код и вернуться туда, где вы были без него.

Ответ 8

Вы можете загружать расширения windbg в отладчик Visual Studio и использовать их из непосредственного окна.

Ответ 10

Это своего рода старый. Если вы добавите выражение watch err,hr, тогда это будет содержать результат GetLastError(), отформатированный как HRESULT (только отладчик VС++).

Ответ 11

Вы можете перетащить текущий курсор строки (желтая стрелка) вверх и вниз по вашему коду, когда выполнение приостановлено.

Кроме того, чтобы включить это во время паузы при исключении, сначала нужно щелкнуть "включить редактирование" в деталях исключения.

Вы также можете сделать исключение VS для обработанных исключений, проверив одно из следующих значений: Debug- > Исключения: брошенная колонка

Ответ 12

Некоторые полезные сочетания клавиш.

  • F11, чтобы войти в метод.
  • Shift-F11, чтобы выйти из метода.
  • F10 для перехода по методу.

Ответ 13

Вещи, которые я часто использую:

  • Нажмите на пункт меню "Отладка | Исключения" (или Ctrl-D, E для краткости), и вы можете включить разбивку во время броска любого исключения или отказаться от определенных исключений.

  • Вы можете настроить отладчик, чтобы загрузить часть исходного кода и символов фреймворка с сервера MS и вставить код рамки. (Некоторые библиотеки, такие как System.ServiceModel, пока недоступны). Он находится в окне "Параметры" в разделе "Отладка". См. Руководство пользователя MSDN.

  • Вы можете использовать отладчик VS.NET для отладки Javascript, запущенного в IE. Вам просто нужно установить IE javascript-отладчик и включить отладку javascript в настройках IE. Затем при ошибке JS появится диалоговое окно "вы хотите отлаживать", и вы можете выбрать отладку в VS.NET.

Ответ 14

Вы можете открыть и поместить контрольную точку в исходный файл, если файл принадлежит другому решению (внешний файл). Отладчик все равно может попасть в точку останова. Не нужно открывать другой экземпляр Visual Studio для отладки внешнего файла. Полезно для отладки веб-сервисов, к которым вы обращаетесь. Это работает до тех пор, пока все источники являются текущими и скомпилированы.