C++26 introduz um cabeçalho padrão <debugging> com três funções noexcept: std::breakpoint(), std::is_debugger_present() e std::breakpoint_if_debugging(). Isso elimina a necessidade de macros específicos de plataforma como __debugbreak() ou inline assembly. O cabeçalho é freestanding e substituível, permitindo implementações personalizadas em sistemas desnudos. std::breakpoint() dispara uma pausa do depurador se anexado, caso contrário seu comportamento é definido pela implementação (por exemplo, SIGTRAP). std::is_debugger_present() verifica a anexação ativa do depurador em tempo real, com implementações específicas da plataforma (por exemplo, API do Windows ou /proc/self/status no Linux).
Sua substituibilidade permite uso em ambientes freestanding. std::breakpoint_if_debugging() combina ambas para pontos de interrupção condicionais, imitando padrões usados em Boost. Test, Catch2, Dear ImGui e Unreal Engine. A característica padroniza uma longa reinvenção de roda em projetos C++, simplificando ferramentas de depuração multiplataforma.
Fonte: Hacker News · Resumido por HeadlinesBriefing