Стектрейс — это отладочный инструмент при разработке. В процессе выполнения программы выдает отчет о работающих стеках в выбранный момент времени, поэтому всегда есть возможность посмотреть класс и имя функции, которая выполняется прямо сейчас. Также можно посмотреть функцию, которая вызвала нужную работающую функцию, и вывести это все в виде списка. Это списки могут помочь найти функции и методы, вызвавшие ошибки в приложении.
До определенного момента стектрейс не был включен в стандарты разработки С++. Но в последнее время ситуация поменялась и отечественные разработчики тоже к тому приложили свои усилия.
Стектрейс в С++
Что такое stack trace — вы уже знаете. Но представьте себе, что каких-то пару лет назад он не был включен в стандарт С++. В 2018-м году Российская инициативная группа разработчиков собирала мнения других программистов по поводу стектрейс в С++ и донесла их в Международный комитет по стандартизации. Четко обосновав, что принятые изменения позволят упростить разработку на С++ и добавят в этот язык больше логики.
Работая над большими проектами на С++, часто возникает потребность узнать, откуда берет начало та или иная функция. Допустим, нужная нам функция вызывается только после возникновения ошибки, тогда не лишним было бы узнать, какие «вызовы» вызвали ошибку и нужную функцию.
Самым простым методом было бы применить отладчик,и остановить его работу в нужном месте и просмотреть стек. Но в некоторых сценариях отладки это сделать невозможно, например:
когда необходимо просмотреть стек с устройства, где нет возможности наладить отладчик;
когда невозможно «внешнее» вмешательство в отлаживаемое приложение.
В этих случаях возможно получать стек только в процессе выполнения программы. Тут и может помочь технология стектрейс. Но для этого нужно внести классы для просмотра стека прямо в стандарт С++. Именно это и инициировали русские разработчики.
Это не значит, что до сих пор никак это нельзя было сделать. До внедрения стектрейс в С++ это все делалось очень «громоздкими» методами такими как:
использование большого обилия форматов;
использование компиляторов и платформ;
подключение различных библиотек и др.
По сути, эти действия только добавляли сложности в проект. А с внедрением стектрейс стало возможным все это сделать двумя строчками кода.
Плюсы использования стектрейс в С++
Стектрейс в С++ принес с собой определенные «облегчения» при отладке программ:
больше не нужно ограничивать себя одной определенной платформой;
отпадает зависимость от определенного компилятора — теперь можно использовать многие компиляторы, которые поддерживают стандарт стектрейс в С++;
больше не нужно переживать по поводу формата отладочной информации;
отпадает зависимость от использования определенных библиотек;
и др.
Stack trace — это то, что облегчит вашу разработку и отладку приложений на языке С++. Стектрейс — это достаточно новая технология для С++, и со временем он будет только развиваться и дополняться новыми возможностями. К примеру, ближайшее дополнение — это добавление способности переноса стектрейсов между разными машинами.
Другое