namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:include:stacktrace

<stacktrace>

std::stacktrace enthält eine Folge von std::stacktrace_entry-Objekten und ermöglicht nachzuvollziehen, auf welchem Wege eine Funktion aufgerufen wurde:

stacktrace.cpp
#include <print>
#include <stacktrace>
 
int f(int x)
{
  auto s = std::stacktrace::current();
  std::println("{}", s);
 
  for(auto const& entry : s)
    std::print("Funktion: {}\nDatei {}, Zeile {}\n---\n",
      entry.description(),
      entry.source_file(),
      entry.source_line());
 
  return x + 20;
}
 
int g(int y)
{
  return f(y + 20);
}
 
int main()
{
  std::println("{}", g(2));
}

liefert z.Z. (Nov 2024) mit g++15 HEAD:

   0# f(int) at /app/example.cpp:6
   1# g(int) at /app/example.cpp:23
   2# main at /app/example.cpp:28
   3#      at :0
   4# __libc_start_main at :0
   5# _start at :0
   6# 

Funktion: f(int)
Datei /app/example.cpp, Zeile 6
---
Funktion: g(int)
Datei /app/example.cpp, Zeile 23
---
Funktion: main
Datei /app/example.cpp, Zeile 28
---
Funktion: 
Datei , Zeile 0
---
Funktion: __libc_start_main
Datei , Zeile 0
---
Funktion: _start
Datei , Zeile 0
---
Funktion: 
Datei , Zeile 0
---
42
kennen/include/stacktrace.txt · Zuletzt geändert: 2024-11-01 14:18 von rrichter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki