Skip to content

Latest commit

 

History

History
86 lines (65 loc) · 2 KB

breakpoint_if_debugging.md

File metadata and controls

86 lines (65 loc) · 2 KB

breakpoint_if_debugging

  • debugging[meta header]
  • std[meta namespace]
  • function[meta id-type]
  • cpp26[meta cpp]
namespace std {
  void breakpoint_if_debugging() noexcept; // (1) C++26
}

概要

デバッガ実行時のみブレークポイントを設置する。

この関数は条件付きブレークポイントであり、デバッガがプログラムを監視中であればプログラムを一時停止 (ブレーク) するが、そうでなければ何もしないよう動作する。

効果

以下と等価:

if (is_debugger_present()) {
  breakpoint();
}
  • is_debugger_present()[link is_debugger_present.md]
  • breakpoint()[link breakpoint.md]

例外

投げない

備考

  • 実装としては、生成されるコードがプラットフォームに対して可能な限り最小になるように最適化することが期待される。例として、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);
}
  • std::breakpoint_if_debugging[color ff0000]
  • std::isnan[link /reference/cmath/isnan.md]
  • std::isinf[link /reference/cmath/isinf.md]

出力例

inf

バージョン

言語

  • C++26

処理系

参照