Стек - вызов - Большая Энциклопедия Нефти и Газа, статья, страница 2
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один. Законы Мерфи (еще...)

Стек - вызов

Cтраница 2


Перехват исключений происходит следующим образом. Когда генерируется исключение, исследуется стек вызовов. Он представляет собой список обращений к функциям, создаваемый по мере того, как одна часть программы вызывает другую функцию.  [16]

Это объект, который создается в результате использования ключевого слова throw. Этот объект является признаком возникновения исключительной ситуации и передается в стек вызовов первого оператора catch, который выполняет обработку этого исключения.  [17]

После останова в контрольной точке вы можете предпринять различные действия для определения того, что происходит с вашей программой. Вы можете добавить переменные в список объектов наблюдения, проверить состояние объектов в инспекторе отладки или просмотреть стек вызовов. Вы можете также использовать режим пошагового выполнения, чтобы увидеть, как изменяются ваши переменные и объекты после выполнения каждой строки программы. По мере продвижения через код строка, которая будет выполнена следующей, выделяется синим. Если у вас открыты список объектов наблюдения и инспектор отладки, вы сможете немедленно увидеть изменения переменных или объектов.  [18]

Стек вызовов отслеживает путь выполнения программы. Если функция main () вызывает функцию Animal: : GetFavoriteFood (), а функция GetFavoriteFood () - функцию Animal: : LookupPreferences (), которая, в свою очередь, вызывает функцию fstream: : operator (), то все эти вызовы заносятся в стек вызовов. Рекурсивная функция может оказаться в стеке вызовов много раз.  [19]

Отладчик позволяет вывести список всех вызванных к моменту выполнения останова процедур. Такая распечатка содержит стек вызовов процедур с указанием номеров операторов, вызвавших эти процедуры.  [20]

В некоторых случаях, когда это возможно. Access выделяет цветом источник ошибки: например, имя неизвестной переменной. Он может открыть окно - - чтобы проверить значения переменных, просмотреть стек вызова, чтобы понять, какие процедуры и функции активны в данный момент, попытаться продолжить выполнение программы по шагам. Разумным решением, на мой взгляд, служит попытка исправить текст программы и закрытие окна модуля. В этом случае выполнение прерванной программы прекращается и ее можно будет запустить заново.  [21]

Аналогия между МФП - и SECD-машинами, изложенная в гл. МФП соответствуют управляющему стеку в SECD-машине. Однако в нашем случае программа хранится в виде компилированного кода, а не в виде лямбда-выражений. Стек вызовов служит для запоминания состояния вычислений в точке вызова функции и восстановления этого состояния по завершении работы вызванной функции. В этом плане он играет роль, аналогичную работе дампа в SECD-машине. Стек вычислений в МФП в точности соответствует совокупности стека и контекста в SECD-машине. В ней параметры функций сохраняют свои имена, связи между именами и величинами хранятся в контексте. В МФП, однако, все ссылки на параметры функций при компиляции переходят к номера элементов стека, и поэтому возникает необходимость в списке связей имя - величина. И наконец, куча в МФП является лишь местом хранения структур и замыканий.  [22]

23 Пример окна, в которое выводится информация об исключении методом ToString. [23]

Свойство Source указывает имя приложения или объекта, вызвавшего генерацию исключения. Свойство TargetSite указывает метод, сгенерировавший исключение. Свойство StackTrace содержит список стека вызовов, предшествующих генерации исключения. Первая строка соответствует последнему вызову. Она соответствует методу, записанному в TargetSite. Последняя строка соответствует первому вызову и указывает процедуру ( в примере TWinForml. Click), внутри которой было сгенерировано исключение, файл приложения и номер строки кода. Вся эта информация позволяет понять причину генерации исключения.  [24]

Для решения многих видов вычислительных задач требуется неоднократно повторять одни и те же алгоритмические процессы. Такие процессы всегда могут быть описаны с помощью рекурсивных или итеративных процедур. Итерация обычно бывает более эффективной, чем рекурсия, поскольку для завершения шага итерации - в отличие от шага рекурсии - не требуется ожидать результатов выполнения последующих шагов. Использование итерации, следовательно, позволяет избежать расходов, связанных с организацией в период исполнения стека латентных вызовов, что невозможно при употреблении рекурсии.  [25]

Это окно показывает список функций, вызванных вашей программой, в том порядке, в котором они вызывались. Здесь будут перечислены функции вашей программы, методы VCL и функции, содержащиеся в DLL Windows. На рис. 11.9 показан стек вызовов в том виде, который он имеет после выполнения программы DebugTst, созданной вами ранее в этой главе.  [26]



Страницы:      1    2