File: main.cpp

package info (click to toggle)
gammaray 3.1.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 24,796 kB
  • sloc: cpp: 109,174; ansic: 2,156; sh: 336; python: 274; yacc: 90; lex: 82; xml: 61; makefile: 28; javascript: 9; ruby: 5
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();
  }
}