C++26 は 3 つの noexcept 関数を持つ標準 <debugging> ヘッダーを導入しました: std::breakpoint(), std::is_debugger_present() および std::breakpoint_if_debugging(). これにより、__debugbreak() やインラインアセンブリなどのプラットフォーム固有のマクロの必要性が排除されました。このヘッダーは freestanding であり、置き換え可能なため、ベare-metal システム上のカスタム実装が可能です。std::breakpoint() はアタッチされたデバッガがあれば停止をトリガーしますが、それ以外は実装定義の動作(例: SIGTRAP)を示します。std::is_debugger_present() はリアルタイムでアクティブなデバッガの添付を確認します。プラットフォーム固有の実装(例: Windows API または Linux 上の /proc/self/status)です。置き換え可能であるため、freestanding 環境で使用できます。std::breakpoint_if_debugging() は両者を組み合わせた条件ブレークポイントを提供し、Boost.Test、Catch2、Dear ImGui、Unreal Engine で使用されるパターンを反映しています。この機能は C++ プロジェクトでの長年のホイール再発明を標準化し、クロスプラットフォーム デバッグ ツールを簡素化します。
出典: Hacker News · 要約:HeadlinesBriefing