File indexing completed on 2025-02-16 05:12:10
0001 #include <backward/backward.hpp> 0002 #include <iostream> 0003 #include <sstream> 0004 #include <stdexcept> 0005 0006 using namespace backward; 0007 0008 class TracedException : public std::runtime_error { 0009 public: 0010 TracedException() : std::runtime_error(_get_trace()) {} 0011 0012 private: 0013 std::string _get_trace() { 0014 std::ostringstream ss; 0015 0016 StackTrace stackTrace; 0017 TraceResolver resolver; 0018 stackTrace.load_here(); 0019 resolver.load_stacktrace(stackTrace); 0020 0021 for (std::size_t i = 0; i < stackTrace.size(); ++i) { 0022 const ResolvedTrace trace = resolver.resolve(stackTrace[i]); 0023 0024 ss << "#" << i << " at " << trace.object_function << "\n"; 0025 } 0026 0027 return ss.str(); 0028 } 0029 }; 0030 0031 void f(int i) { 0032 if (i >= 42) { 0033 throw TracedException(); 0034 } else { 0035 std::cout << "i=" << i << "\n"; 0036 f(i + 1); 0037 } 0038 } 0039 0040 int main() { 0041 try { 0042 f(0); 0043 } catch (const TracedException &ex) { 0044 std::cout << ex.what(); 0045 } 0046 }