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

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

Code map - Map relationships in code

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

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

Дополнительные сведения об отладке в Visual Studio см. в средстве отладчика.

Примечание.

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

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

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

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

Code map - Repro bug

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

Code map - Find code

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

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

Code map - Show method and related fields

Совет

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

Code map - Show tooltips

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

Screenshot of a code map window with the history field selected and a code editor window where all instances of history are highlighted.

Screenshot of a code map window with the paintObjects field selected and a code editor window where all instances of paintObjects are highlighted.

Совет

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

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

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

Code map - Find all references

Open a code map from the code editor

Примечание.

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

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

Screenshot of a code map window with the Layout menu open and the Left to Rgiht command selected.

Совет

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

Screenshot of a code map window with the relationshiop arrows between the fields pointing from left to right.

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

Screenshot of a code map window with the PaintCanvas method selected and a code snippet image showing the PainCanvas method name highlighted.

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

Screenshot of a code map window with the Clear method selected and a code snippet image showing the code for the Clear method.

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

Screenshot of a code map window with the addPaintObject method selected and a code snippet image showing the code for the addPaintObject method.

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

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

Code map - Find missing method call

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

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

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

Code map - Comment and flag items for followup

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

Code map - Commented and flagged items

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

Code map - Share, export, mail

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

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

Code map - Add missing method call

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

Code map - Confirm code fix

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

Code map - Update map with missing method call

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

Code map - Updated map with method call

Примечание.

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

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