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