C++26 引入了标准化的 <debugging> 头文件,其中包含三个 noexcept 函数:std::breakpoint()、std::is_debugger_present() 和 std::breakpoint_if_debugging()。这消除了对平台相关宏(如 __debugbreak() 或内联汇编)的需求。该头文件是 freestanding(独立于操作系统)且可替换的,允许在裸机系统上实现自定义实现。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整理摘要