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


Просмотр иерархии вызовов

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

В Visual Studio можно просмотреть иерархию вызовов во время разработки. Это означает, что вам не нужно задавать точку останова и запускать отладчик для просмотра стека вызовов во время выполнения.

Использование окна иерархии вызовов

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

Имя члена отображается в области представления дерева в окне иерархии вызовов . Если развернуть узел-член, вызовыимени участника и для C++, вызовы изимени члена отображаются.

Для кода C++ можно увидеть явные вызовы как к члену, так и из нее:

Иерархия вызовов для кода C++ в Visual Studio

Замечание

В коде C++ функции-члены могут вызываться неявно, например конструктором или методом преобразования типов; Эти неявные вызовы не обязательно включены в список.

Для кода C# и Visual Basic можно увидеть вызовы члена, но не из:

Иерархия вызовов для кода C# в Visual Studio

  • Если развернуть узел "Вызовы к узлу", отображаются все члены, вызывающие выбранный элемент.

  • Для C++вы разверните узел "Вызовы из ", отображаются все члены, которые (явно) вызываются выбранным элементом.

Затем можно развернуть каждый вызывающий член, чтобы просмотреть свои вызовы и для C++, вызовы из узлов. Это позволяет перейти в стек вызывающих объектов, как показано на следующем рисунке:

Окно иерархии вызовов с развернутыми несколькими уровнями

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

Поле "Область поиска " на панели инструментов содержит варианты "Мое решение", "Текущий проект" и "Текущий документ".

При выборе дочернего элемента в области представления дерева иерархии вызовов :

  • В области сведений о иерархии вызовов отображаются все строки кода, в которых этот дочерний элемент вызывается из родительского элемента.

  • В окне определения кода , если он открыт, отображается код для выбранного элемента (только C++). Дополнительные сведения об этом окне см. в разделе "Просмотр структуры кода".

Замечание

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

Контекстное меню

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

Элемент контекстного меню Описание
Добавление нового корневого каталога Добавляет выбранный узел в область представления дерева в качестве нового корневого узла. Это позволяет сосредоточить внимание на определенном поддереве.
Удаление корневого каталога Удаляет выбранный корневой узел из области представления дерева. Этот параметр доступен только из корневого узла.

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

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

Вы также можете использовать SHIFT+F12 для выполнения команды "Найти все ссылки" на выбранном узле.
Копировать Копирует содержимое выбранного узла (но не его поднода).
Обновить Свернуть выбранный узел, чтобы повторно развернуть его, отобразится текущая информация.