File: main.cpp

package info (click to toggle)
backward-cpp 1.6-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 460 kB
  • sloc: cpp: 3,736; sh: 124; python: 51; makefile: 4
file content (46 lines) | stat: -rw-r--r-- 894 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <backward/backward.hpp>
#include <iostream>
#include <sstream>
#include <stdexcept>

using namespace backward;

class TracedException : public std::runtime_error {
public:
  TracedException() : std::runtime_error(_get_trace()) {}

private:
  std::string _get_trace() {
    std::ostringstream ss;

    StackTrace stackTrace;
    TraceResolver resolver;
    stackTrace.load_here();
    resolver.load_stacktrace(stackTrace);

    for (std::size_t i = 0; i < stackTrace.size(); ++i) {
      const ResolvedTrace trace = resolver.resolve(stackTrace[i]);

      ss << "#" << i << " at " << trace.object_function << "\n";
    }

    return ss.str();
  }
};

void f(int i) {
  if (i >= 42) {
    throw TracedException();
  } else {
    std::cout << "i=" << i << "\n";
    f(i + 1);
  }
}

int main() {
  try {
    f(0);
  } catch (const TracedException &ex) {
    std::cout << ex.what();
  }
}