"Скрытые секреты" отладчика 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 минус.) Таким образом вы можете перейти в функцию, проверить там код и вернуться туда, где вы были без него.
Ответ 7
Условные точки останова.
Ответ 8
Вы можете загружать расширения windbg в отладчик Visual Studio и использовать их из непосредственного окна.
Ответ 9
Как опубликовано в другом сообщении, Сара Форд делает текущую серию в отладчике VS.
Ее блог - лучший источник советов VS: http://blogs.msdn.com/saraford/archive/tags/Visual+Studio+2008+Tip+of+the+Day/default.aspx
Ответ 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 для отладки внешнего файла. Полезно для отладки веб-сервисов, к которым вы обращаетесь. Это работает до тех пор, пока все источники являются текущими и скомпилированы.