Для чего предназначено окно Call Stack в Visual Studio?

Какова цель окна стека вызовов в Visual Studio?

6
задан JoeG 18 August 2010 в 14:52
поделиться

4 ответа

Каждый раз, когда вы вызываете метод, в «стек» для этого потока помещается запись, описывающая метод и параметры, используемые для вызова метода. Когда метод возвращается, метод и его параметры удаляются из стека. Вот как операционная среда знает, куда вернуться после завершения метода. Он просто удаляет верхнюю запись из стека, очищает все локальные переменные, которые были созданы во время этого кадра стека, и возвращается к предыдущему методу. (Это слишком упрощенно, но в целом идея.)

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

Вот что это значит для операционной среды.

Для разработчика практическая цель - помочь вам понять, почему ваша программа находится в том состоянии, в котором она находится. Всякий раз, когда выполнение программы останавливается в отладчике, либо из-за точки останова, либо из-за возникшего исключения (в зависимости от вашего Visual Studio), у вас будет доступ к текущему стеку. Помните, что этот стек не показывает ВСЕ методы, которые были вызваны до этого момента. Любой завершенный метод был удален из стека. Это не бревно.

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

3
ответ дан 9 December 2019 в 20:38
поделиться

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

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

Если вам интересно: серые линии - это вызовы методов, для которых не загружен исходный код или символы. Вы можете щелкнуть эти строки правой кнопкой мыши и выбрать «Загрузить символы», чтобы загрузить символы.

7
ответ дан 9 December 2019 в 20:38
поделиться

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

1
ответ дан 9 December 2019 в 20:38
поделиться

Цель стека вызовов - позволить вам точно увидеть, какой вызов вызвал возникновение проблемы.

Когда вы смотрите на трассировку стека в Exception, вы можете увидеть исходный вызов, который вызвал ошибку.

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

1
ответ дан 9 December 2019 в 20:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: