namespace std {
void breakpoint_if_debugging() noexcept; // (1) C++26
}
概要
デバッガ実行時のみブレークポイントを設置する。
この関数は条件付きブレークポイントであり、デバッガがプログラムを監視中であればプログラムを一時停止 (ブレーク) するが、そうでなければ何もしないよう動作する。
効果
以下と等価:
if (is_debugger_present()) {
breakpoint();
}
例外
投げない
備考
- 実装としては、生成されるコードがプラットフォームに対して可能な限り最小になるように最適化することが期待される。例として、x86ターゲット環境ではINT3命令をひとつだけ生成することが期待される
例
#include <print>
#include <debugging>
#include <cmath>
// なんらかの処理
double g(double a, double b) {
return a / b;
}
double f(double a, double b) {
double ret = g(a, b);
if (std::isnan(ret) || std::isinf(ret)) {
// 演算結果でNaNかinfが発生したらブレークし、
// デバッガでパラメータ (ローカル変数) などを確認する
std::breakpoint_if_debugging();
}
return ret;
}
int main() {
double ret = f(2.0, 0.0);
std::println("{}", ret);
}
出力例
inf
バージョン
言語
- C++26
処理系
- Clang: 19 ❌
- GCC: 14 ❌
- Visual C++: 2022 Update 10 ❌