Сопоставление определенных зависимостей в картах кода
Для понимания конкретных зависимостей в коде следует визуализировать их путем создания карт кода (только в 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