6

C++23 では、<stacktrace>ヘッダーを介してスタック トレース メカニズムが導入される可能性があります。

私たちはstd::stack_traceクラスを作ることを知っていますstd::stacktrace_entryしかし、これは存在するだけではあまり役に立ちません。なぜなら、誰もが常にスタック トレースを収集し、それをスローする例外に入れるように苦労して確認する必要があるからです。それは... わかりません。

代わりに、すべての (?) 例外が自動的にスタック トレースを実行するようにしたいので、それを調べたり印刷したりしたとき、またはキャッチされなかったときに自動印刷された場合でも、スタック トレースが印刷されます。

これは可能になる予定ですか、それとも私はあまりにも多くを求めていますか?

4

1 に答える 1

5

決定的な答えではありませんが、基本的にあなたが望むものを許可するための提案があります:

論文 2370: 例外からのスタック トレース / Polukhin & Nekrashevich

これは数か月前 (2021 年 8 月) に提案されました。それはあなたが書くことができます:

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年に。

于 2021-12-29T19:17:14.137 に答える