<stacktrace>
标头引入堆栈跟踪机制。
我知道我们将会有一个由std::stack_trace
组成的
std::stacktrace_entry
班级,这一切都很好。但是 - 仅靠“现有”并没有多大帮助,因为每个人都必须煞费苦心地确保他们始终收集堆栈跟踪并将其放入他们抛出的异常中。那是……没有得到。
相反,我想要的是每个(?)异常自动携带堆栈跟踪,这样当我检查或打印它时,甚至当它在未捕获时自动打印时,堆栈跟踪都会被打印出来。
这是计划中可能实现的,还是我要求太多?
try {
foo("test1");
bar("test2");
} catch (const std::exception& ex) {
std::stacktrace trace = std::stacktrace::from_current_exception(); // <---
std::cerr << "Caught exception: " << ex.what() << ", trace:\n" << trace;
}
但是有一个问题是是否默认打开此功能。可能有这样的东西:
std::this_thread::set_capture_stacktraces_at_throw(bool enable) noexcept;
您需要致电才能实现。编辑:
不幸的是,这不会发生在 C++2023 中;可能在 2026 年。