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

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

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

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

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

Имя члена отображается в окне Иерархия вызовов в области представления в виде дерева. Если развернуть узел элемента, то появятся вложенные узлы Calls To (Вызовы к) имя элемента (C++) и Calls From (Вызовы из) имя элемента.

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

Call Hierarchy for C++ code in Visual Studio

Примечание.

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

Если используется код C# и Visual Basic, вы можете просмотреть вызовы к элементу, но не из него:

Call Hierarchy for C# code in Visual Studio

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

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

Затем можно развернуть каждый вызывающий элемент и просмотреть все его узлы Calls To (Вызовы к) для C++ и Calls From (Вызовы из). Это дает возможность переходить по стеку вызывающих объектов, как показано на приведенном ниже рисунке:

Call Hierarchy window with multiple levels expanded

Для членов, определенных как виртуальные или абстрактные, появляется узел Переопределяет имя_метода. Для членов интерфейса появляется узел Реализует имя метода. Эти разворачиваемые узлы находятся на одном уровне с узлами Вызовы и Вызовы из.

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

При выборе дочернего члена в области представления в виде дерева в окне Иерархия вызовов происходит следующее:

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

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

Примечание.

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

Пункты контекстного меню

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

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

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

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

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