Capturarea Programatică a Urmei Apelurilor cu std::stacktrace în C++23 în C++

Ghid de depanare modernă în C++23 cu biblioteca <stacktrace>: capturarea automată a stivei de apeluri (call stack) la apariția unei erori sau a unei excepții, afișarea numelui fișierului, funcției și numărului liniei fără utilitare externe.

Sintaxă
#include <stacktrace> | auto trace = std::stacktrace::current(); std::println("{}", trace);

Până la apariția standardului C++23, inspectarea stivei de apeluri (Call Stack) în caz de eroare critică sau excepție necesita fie rularea unui depanator greoi (GDB / LLDB / Visual Studio Debugger), fie utilizarea unor funcții dependente de platformă (cum ar fi backtrace() pe Linux glibc sau StackWalk64 pe Windows). Biblioteca standard <stacktrace> din C++23 oferă o interfață portabilă, de tip sigur și nativă pentru a captura, itera și formata stiva curentă de execuție.

Capturarea și jurnalizarea automată a erorilor cu stacktrace
#include <stacktrace>
#include <print>
#include <stdexcept>

void functieInterna(int nivel) {
    if (nivel <= 0) {
        // Capturăm stiva curentă de apeluri:
        auto stiva = std::stacktrace::current();
        std::println("STIVA DE APELURI LA MOMENTUL ERORII:
{}", stiva);
        return;
    }
    functieInterna(nivel - 1);
}

void pornesteProces() {
    functieInterna(3);
}

int main() {
    pornesteProces();
    return 0;
}

Ieșire tipică în consolă:

STIVA DE APELURI LA MOMENTUL ERORII:
 0# functieInterna(int) at /home/proiect/main.cpp:7
 1# functieInterna(int) at /home/proiect/main.cpp:12
 2# functieInterna(int) at /home/proiect/main.cpp:12
 3# functieInterna(int) at /home/proiect/main.cpp:12
 4# pornesteProces() at /home/proiect/main.cpp:16
 5# main at /home/proiect/main.cpp:20