C++26에 표준 디버깅 헤더 추가
원제 C++26: The New Debugging Header
103 포인트댓글 27
Key Point
모든 C++ 프로젝트가 직접 구현한 디버거 감지와 중단점 기능이 드디어 표준 라이브러리로 통합되어 크로스플랫폼 호환성 문제가 해결됩니다.
핵심 요약
- 모든 C++ 프로젝트가 각자 구현해온 프로그래밍 방식의 중단점 설정이 C++26에서 표준화되었다.
- P2546R5와 P2810R4 제안으로 새로운 헤더가 추가되며, std::breakpoint(), std::is_debugger_present(), std::breakpoint_if_debugging() 세 함수를 제공한다.
- std::breakpoint()는 무조건부 중단점으로 디버거가 연결되면 실행을 멈추고 (x86에서 int3 명령어로 컴파일), 디버거가 없으면 구현 정의 동작을 한다.
- std::is_debugger_present()는 현재 디버거가 추적 중인지 확인하며, Windows의 IsDebuggerPresent(), Linux의 /proc/self/status TracerPid 필드 등 플랫폼별로 다르게 구현된다.
- 이 함수는 operator new/delete처럼 사용자가 정의할 수 있으므로, 베어메탈 환경처럼 OS 수준의 디버거 감지가 불가능한 플랫폼에서도 사용자 정의 구현을 제공할 수 있다.
- std::breakpoint_if_debugging()은 편의 함수로, 디버거가 연결되면 중단점을 실행하고 아니면 아무것도 하지 않는다.
- 이 함수의 분리된 설계는 진단 출력 활성화, 디버깅 중 타임아웃 비활성화, 디버거 친화적 메모리 할당자 전환 등 다양한 용도를 가능하게 한다.
- Boost.Test, Catch2, Dear ImGui 등 주요 라이브러리가 이미 자체 구현을 가진 기능이 마침내 표준화되어 플랫폼별 조건부 컴파일의 복잡성을 제거한다.