Поделиться через


Использование карт кода для отладки приложений

Карты кода в Visual Studio помогут избежать потери в больших базах кода, незнакомом коде или устаревшем коде. Например, при отладке может потребоваться просмотреть код во многих файлах и проектах. Используйте карты кода, чтобы перемещаться по фрагментам кода и понимать связи между ними. Таким образом, вам не нужно отслеживать этот код в голове или нарисовать отдельную схему. Таким образом, когда работа прерывается, карты кода помогают обновить память о коде, над которым вы работаете.

Карта кода — сопоставление связей в коде

Зеленая стрелка показывает, где курсор отображается в редакторе

Дополнительные сведения о командах и действиях, которые можно использовать при работе с картами кода, см. в статье "Обзор и изменение порядка карт кода".

Узнайте больше об отладке в Visual Studio с помощью средства Debugger.

Замечание

Для создания и редактирования карт кода требуется выпуск Visual Studio Enterprise. В выпусках Visual Studio Community и Professional можно открывать схемы, созданные в выпуске Enterprise, но их невозможно изменить.

Определение проблемы

Предположим, что в программе рисования есть ошибка, над которой вы работаете. Чтобы воспроизвести ошибку, откройте решение в Visual Studio и нажмите клавишу F5 , чтобы начать отладку.

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

Карта кода — ошибка repro

Поэтому вы начинаете исследование, выполняя поиск метода Undo. Его можно найти в PaintCanvas классе.

Карта кода — поиск кода

Начало сопоставления кода

Теперь запустите сопоставление undo метода и его связей. В редакторе кода добавьте метод undo, а также поля, на которые он ссылается, на новую карту кода. При создании новой карты может потребоваться некоторое время для индексирования кода. Это помогает ускорить выполнение последующих операций.

Карта кода — отображение методов и связанных полей

Подсказка

В зеленом выделении показаны последние элементы, добавленные на карту. Зеленая стрелка показывает положение курсора в коде. Стрелки между элементами представляют разные связи. Дополнительные сведения о элементах на карте можно получить, переместив указатель мыши на них и проверив подсказки.

Карта кода — отображение подсказок

Чтобы просмотреть определение кода для каждого поля, дважды щелкните поле на карте или выберите поле и нажмите клавишу F12. Зеленая стрелка перемещается между элементами на карте. Курсор в редакторе кода также автоматически перемещается.

Снимок экрана: окно карты кода с выбранным полем истории и окном редактора кода, в котором выделены все экземпляры истории.

Снимок экрана: окно карты кода с выбранным полем paintObjects и окно редактора кода, в котором выделены все экземпляры paintObjects.

Подсказка

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

Общие сведения о связях между частями кода

Теперь вы хотите знать, какой другой код взаимодействует с history полями и paintObjects полями. Все методы, ссылающиеся на эти поля, можно добавить на карту. Это можно сделать из карты или из редактора кода.

Карта кода — поиск всех ссылок

Открытие карты кода из редактора кода

Замечание

Если вы добавляете элементы из проекта, совместно используемого в нескольких приложениях, таких как Windows Phone или Магазин Windows, эти элементы всегда отображаются в активном проекте приложения на карте. Таким образом, если вы измените контекст на другой проект приложения, контекст на карте также изменяется для всех новых добавленных элементов из общего проекта. Операции, выполняемые с элементом на карте, применяются только к тем элементам, которые имеют одинаковый контекст.

Измените макет, чтобы изменить поток связей и упростить чтение карты. Вы также можете перемещать элементы по карте, перетаскивая их.

Снимок экрана: окно карты кода с открытым меню Макет и выбранной командой Слева направо.

Подсказка

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

Снимок экрана: окно карты кода со стрелками связей между полями, указывающими слева направо.

Рассмотрим эти методы. На карте дважды щелкните метод PaintCanvas или выберите этот метод и нажмите клавишу F12. Вы узнаете, что этот метод создает history и paintObjects как пустые списки.

Снимок экрана: окно карты кода с выбранным методом PaintCanvas и изображением фрагмента кода с выделенным именем метода PainCanvas.

Теперь повторите те же действия, чтобы проверить определение метода clear. Вы узнаете, что clear выполняет некоторые задачи с paintObjects и history. Затем вызывается метод Repaint.

Снимок экрана: окно карты кода с выбранным методом Clear и изображение фрагмента кода с кодом для метода Clear.

Теперь изучите addPaintObject определение метода. Он также выполняет некоторые задачи с history и paintObjects. Он также вызывает Repaint.

Снимок экрана: окно карты кода с выбранным методом addPaintObject и изображением фрагмента кода, показывающим код для метода addPaintObject.

Поиск проблемы путем изучения карты

Кажется, что все методы, которые изменяют history и paintObjects вызывают Repaint. undo метод не вызывает Repaint, несмотря на то что undo изменяет одни и те же поля. Поэтому вы думаете, что можете устранить эту проблему, позвонив на Repaint из undo.

Карта кода— поиск отсутствующих вызовов метода

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

Поделитесь своим открытием и вашими дальнейшими шагами

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

Карта кода — элементы примечания и флага для последующего выполнения

Например, можно добавить примечания к карте и помечать элементы с помощью цветов.

Карта кода — закомментированные и помеченные элементы

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

Карта кода — общий доступ, экспорт, почта

Устранение проблемы и отображение того, что вы сделали

Чтобы устранить эту ошибку, добавьте вызов Repaint к undo.

Карта кода — добавление недостающего вызова метода

Чтобы подтвердить исправление, перезапустите сеанс отладки и попытаетесь воспроизвести ошибку. Теперь выбор Отменить мой последний штрих работает так, как вы ожидаете, и подтверждает правильность вашего исправления.

Карта кода — подтверждение исправления кода

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

Карта кода — обновление карты с отсутствующим вызовом метода

Теперь на карте показана связь между отменой и перекраской.

Карта кода — обновленная карта с вызовом метода

Замечание

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

Теперь вы закончите расследование. Вы успешно нашли и исправили проблему, сопоставив код. У вас также есть карта, которая помогает перемещаться по коду, помните, что вы узнали, и показывает шаги, которые вы сделали для устранения проблемы.