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


Сопоставление определенных зависимостей в картах кода

Для понимания конкретных зависимостей в коде следует визуализировать их путем создания карт кода (только в Visual Studio Ultimate). Затем можно перейти в эти отношения с помощью карты, которая появляется рядом с кодом. Это помогает отслеживать место в коде во время работы.

Карта кода — карта отношений в коде

Зеленая стрелка показывает нахождение курсора в редакторе. На карте можно оставлять примечания так же, как на бумаге.

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

Создайте или откройте карту кода

Чтобы создать карту кода, потребуется Visual Studio Ultimate 2013 и решение, включающее Visual C# .NET, Visual Basic .NET, X++ для Microsoft Dynamics AX или код C++ (ограниченная поддержка). Чтобы получить обозначенные цветом отношения, потребуется Visual Studio 2013 с обновлением 3. Чтобы сопоставить код X++ с кодом, общим для нескольких приложений, потребуется Visual Studio 2013 с обновлением 2 или более поздней версии.

Вы можете создать карту кода следующим образом:

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

  • Перетащите элемент, например, исходный или двоичный файл из обозревателя решений в карту кода, чтобы включить или выделить элемент на карте.

  • Щелкните правой кнопкой мыши пустую область в окне редактора и нажмите кнопку Показать на карте кода. Будет создана новая пустая карта кода.

  • Щелкните правой кнопкой мыши объект или класс в окне редактора и нажмите кнопку Показать на карте кода. Будет создана карта кода для выбранного элемента. С помощью этого меню можно также найти все ссылки или отобразить связанные элементы на карте кода.

  • Нажмите кнопку Карта кода в меню Отладка приостановленного приложения.

  • В открытом файле IntelliTrace или в виде графа зависимости в меню Архитектура.

Вы можете просматривать, вносить ограниченные правки и перемещаться по картам кода, используя Visual Studio Premium 2013 или Visual Studio Professional 2013.

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

Примеры работы с картами кода: Анализ сложного кода с помощью карты кода (канал 9).

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

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

При рисовании линии и выборе команды Отменить последнюю линию ничего не происходит, пока не будет нарисована следующая линия.

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

Таким образом, вы начинаете поиск ошибки с поиска метода Undo. Он находится в классе PaintCanvas.

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

Запуск сопоставления кода

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

Карта кода — отображение метода и соответствующих полей

Совет

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

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

Навигация и просмотр кода из сопоставления

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

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

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

Совет

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

Отношения между частями кода

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

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

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

Карта кода — изменение макета

Совет

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

Карта кода — изменение макета

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

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

Теперь повторите эти же шаги, чтобы просмотреть определение метода clear. Метод clear выполнит некоторые задачи с paintObjects и history. Затем он вызовет метод Repaint.

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

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

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

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

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

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

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

Совместное использование обнаружения и следующие действия

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

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

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

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

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

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

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

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

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

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

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

Можно обновить карту для отображения внесенного исправления.

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

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

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

Примечание

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

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

См. также

Основные понятия

Сопоставление методов в визуализации стека вызовов при отладке в Visual Studio

Визуализация кода