Трассировка стека

редактировать

В вычислениях, трассировка стека (также называемая стеком backtrace или stack traceback ) - это отчет об активных кадрах стека в определенный момент времени во время выполнения программы. Когда программа запускается, память часто динамически распределяется в двух местах; стек и куча. Память постоянно выделяется в стеке, но не в куче, что отражает их имена. Стек также относится к программной конструкции, поэтому для отличия этот стек называется программным стеком времени выполнения . Технически, как только блок памяти был выделен в стеке, его нелегко удалить, так как могут быть другие блоки памяти, которые были выделены до него. Каждый раз, когда функция вызывается в программе, блок памяти выделяется поверх стека времени выполнения, который называется записью активации (или указателем стека). На высоком уровне запись активации выделяет память для параметры функции и локальные переменные, объявленные в функции.

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

Трассировка стека позволяет отслеживать последовательность вызываемых вложенных функций - до точки, где создается трассировка стека. В посмертном сценарии это распространяется на функцию, в которой произошел сбой (но не обязательно). Связанные вызовы не отображаются в трассировке стека.

В качестве примера следующая программа Python содержит ошибку.

1 def a (): 2 i = 0 3 j = b (i) 4 return j 5 6 def b (z): 7 k = 5 8 if z == 0: 9 c () 10 return k + z 11 12 def c (): 13 error () 14 15 a ()

При запуске программы под стандартным интерпретатором Python появляется следующее сообщение об ошибке.

Отслеживание (последний вызов последним): файл «tb.py», строка 15, в a (), файл «tb.py», строка 3, в aj = b (i) файле «tb.py» ", строка 9, в bc () Файл" tb.py ", строка 13, в c error () NameError: имя 'error' не определено

Трассировка стека показывает, где возникает ошибка, а именно в cфункция. Он также показывает, что функция cбыла вызвана b, которая была вызвана a, которая, в свою очередь, была вызвана кодом в строке 15 (последняя line) программы. Записи активации для каждой из этих трех функций должны быть расположены в стеке таким образом, чтобы функция aзанимала нижнюю часть стека, а функция cзанимала верхнюю часть стека..

Поддержка языков

Многие языки программирования, включая Java и C #, имеют встроенную поддержку для получения текущей трассировки стека с помощью системных вызовов. C ++ не имеет встроенной поддержки для этого, но пользователи C ++ могут извлекать трассировки стека с помощью (например) библиотеки stacktrace . В JavaScript, исключения содержат свойство stack, которое содержит стек из того места, где он был брошен.

См. Также
Ссылки

[InvalidOperationException: последовательность не содержит элементов]

System.Linq.Enumerable.First (источник IEnumerable`1) +335 OviSystem.Controllers.TestSessionsController.QA (Int32 TestID, String SessionCode, Int32 questionid) +3266 lambda_method (Closure, ControllerBase, Object) +190 System. Web.Mvc.ActionMethodDispatcher.Execute (контроллер ControllerBase, параметры объекта) +14 System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, параметры IDictionary`2) +157 System.Web.Mvc.ControllerActionInvoker.InvokeActionMettext controller actionDescriptor, параметры IDictionary`2) +27 System.Web.Mvc.Async.AsyncControllerActionInvoker. b__39 (IAsyncResult asyncResult, ActionInvocation innerInvokeState) +22 System.Web.Mvc.Async.WrappedAsyncResult`Asult`2.Cleg 29 System.Web.Mvc. Async.WrappedAsyncResultBase`1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult asyncResult) +49 System.Web.Mvc.Async.Async.AsyncInvocation.With>50 Mvc.Async. <>c__DisplayClass46. b__3f () +228 System.Web.Mvc.Async. <>c__DisplayClass33. b__32 (IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsync 1.CallEndDelegate (IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionc.MethodWithFilters (System.Result) asyncControllerActionInvoker.EndInvokeActionc.MethodWith49. <>c__DisplayClass2b. b__1c () +26 System.Web.Mvc.Async. <>c__DisplayClass21. b__1e (IAsyncResult asyncResult) +100 System.Web.Mvc.Async.WrappedAsyncResult`1.C (IAsyncResult asyncResult) +10 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End () +49 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction (IAsyncResult asyncResult.MusyncResult) +44 System. vc.Controller. b__1d (IAsyncResult asyncResult, ExecuteCoreState innerState) +13 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate (IAsyncResult asyncResult) +29 System.Wec`c.WesultAsync.) +49 System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) +38 System.Web.Mvc.Controller. b__15 (IAsyncResult asyncResult, контроллер контроллера) +12 System.Web.Mvc.Async.Wrapped`1AsyncV..CallEndDelegate (IAsyncResult asyncResult) +22 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End () +49 System.Web.Mvc.Controller.EndExecute (IAsyncResult. AsyncResult) +28vc. Web.Mvc.Async.IAsyncController.EndExecute (IAsyncResult asyncResult) +10 System.Web.Mvc.MvcHandler. b__5 (IAsyncResult asyncResult, ProcessRequestState innerState) +21 System.WebEb.Mrapped ` IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End () +49 System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult async Результат) +28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest (результат IAsyncResult) +9 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Application (98) System.ExecutionStep. ExecuteStepImpl (шаг IExecutionStep) +50 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершенное синхронно) +163
  1. ^ →
Последняя правка сделана 2021-06-09 07:01:59
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте