Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
Отчет о стековых фреймах во время выполнения программы
Report of stack frames during program execution
В вычислительной технике, трассировка стека (также называемая обратной трассировкой стека или стековым трейсбеком) — это отчет об активных стековых фреймах в определенный момент времени во время выполнения программы. Когда программа запускается, память часто динамически выделяется в двух местах: стек и куча. Память непрерывно выделяется в стеке, но не в куче, что отражается в их названиях. Стек также относится к структуре программирования, поэтому для его различения этот стек называют стеком вызовов функций программы. Технически, после выделения блока памяти в стеке, его нельзя легко освободить, так как там могут быть другие блоки памяти, выделенные ранее. Каждый раз, когда в программе вызывается функция, поверх стека вызовов выделяется блок памяти, называемый записью активации. Обычно запись активации хранит аргументы функции и локальные переменные. Точное содержание и структура записи активации определяются соглашением о вызовах. Программисты часто используют трассировку стека во время интерактивной и посмертной отладки. Конечные пользователи могут увидеть трассировку стека, отображаемую как часть сообщения об ошибке, о которой пользователь может сообщить программисту. Трассировка стека позволяет отследить последовательность вложенных функций, вызванных до точки генерации трассировки. В сценарии посмертного анализа это распространяется до функции, в которой произошла ошибка (но не обязательно была вызвана ею). Вызовы функций, не являющиеся вложенными, не отображаются в трассировке стека.
In computing, a stack trace (also called stack backtrace or stack traceback) is a report of the active stack frames at a certain point in time during the execution of a program. When a program is run, memory is often dynamically allocated in two places: the stack and the heap. Memory is continuously allocated on a stack but not on a heap, thus reflective of their names. Stack also refers to a programming construct, thus to differentiate it, this stack is referred to as the program's function call stack. Technically, once a block of memory has been allocated on the stack, it cannot be easily removed as there can be other blocks of memory that were allocated before it. Each time a function is called in a program, a block of memory called an activation record is allocated on top of the call stack. Generally, the activation record stores the function's arguments and local variables. What exactly it contains and how it's laid out is determined by the calling convention. Programmers commonly use stack tracing during interactive and post mortem debugging. End users may see a stack trace displayed as part of an error message, which the user can then report to a programmer. A stack trace allows tracking the sequence of nested functions called up to the point where the stack trace is generated. In a post mortem scenario this extends up to the function where the failure occurred (but was not necessarily caused). Sibling calls do not appear in a stack trace.
Языковая поддержка
Многие языки программирования, включая Java и C#, имеют встроенную поддержку для получения текущего стека вызовов через системные вызовы. До добавления `std::stacktrace` в стандартную библиотеку как контейнера для элементов стека вызовов, в версиях C++ до C++23 не было встроенной поддержки для этого, но пользователи C++ могут получать стеки вызовов с помощью (например) библиотеки stacktrace. В JavaScript исключения содержат свойство `stack`, которое содержит стек вызовов из места, где исключение было выброшено.
Many programming languages, including Java and C#, have built in support for retrieving the current stack trace via system calls. Before std::stacktrace was added in standard library as a container for std::stacktrace entry, pre C++23 has no built in support for doing this, but C++ users can retrieve stack traces with (for example) the stacktrace library. In JavaScript, exceptions hold a stack property that contain the stack from the place where it was thrown.