File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 191191 < p class ="text-right "> < small >
192192 最終更新日時:
193193 < time itemprop ="datePublished " class ="js-local-time "
194- datetime ="2026-10-08T14:08:32 +09:00 ">
195- 2026年10月08日 14時08分32秒 (JST)
194+ datetime ="2026-10-09T14:24:38 +09:00 ">
195+ 2026年10月09日 14時24分38秒 (JST)
196196 </ time >
197197 < br />
198198 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -260,6 +260,7 @@ <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに
260260< h2 > 備考</ h2 >
261261< ul >
262262< li > 実装としては、生成されるコードがプラットフォームに対して可能な限り最小になるように最適化することが期待される。例として、x86ターゲット環境ではINT3命令をひとつだけ生成することが期待される</ li >
263+ < li > デバッガがプログラムを監視していない状況でこの関数が呼び出された場合、プログラムが異常終了する可能性がある。製品のコードに残す場合は、< code > < a href ="breakpoint_if_debugging.html "> breakpoint_if_debugging()</ a > </ code > を使用する</ li >
263264</ ul >
264265< h2 > 例</ h2 >
265266< p > < div class ="yata " id ="862fb42dd730cd979e3ee05a79ee6411fe0a8a96 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include < a href ="../print.html "> <print></ a > </ span >
Original file line number Diff line number Diff line change 191191 < p class ="text-right "> < small >
192192 最終更新日時:
193193 < time itemprop ="datePublished " class ="js-local-time "
194- datetime ="2026-10-08T14:08:32 +09:00 ">
195- 2026年10月08日 14時08分32秒 (JST)
194+ datetime ="2026-10-09T14:24:38 +09:00 ">
195+ 2026年10月09日 14時24分38秒 (JST)
196196 </ time >
197197 < br />
198198 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -259,6 +259,13 @@ <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに
259259< h2 > 備考</ h2 >
260260< ul >
261261< li > 実装としては、生成されるコードがプラットフォームに対して可能な限り最小になるように最適化することが期待される。例として、x86ターゲット環境ではINT3命令をひとつだけ生成することが期待される</ li >
262+ < li > デバッガが提供する条件付きブレークポイント機能と比べて、以下の利点がある:< ul >
263+ < li > 停止条件がプログラムの一部として評価されるため高速である。デバッガの条件付きブレークポイントは、その位置に到達するたびにプログラムを停止させてデバッガ側で条件式を評価するため、繰り返し回数の多いループでは実行速度が大きく低下する</ li >
264+ < li > 停止位置がソースコードとともに管理される。行番号で指定するブレークポイントはコードの編集によってずれるが、この関数の呼び出しはコードの移動に追従し、リポジトリで共有できる。テンプレートやインライン関数、ラムダ式のように、デバッガから位置を指定しにくい箇所も指定できる</ li >
265+ < li > デバッガごとの設定が不要である。デバッガごとに異なるスクリプトを用意せずに、同一のソースコードで同じ位置に停止できる</ li >
266+ < li > デバッガをアタッチする前に実行される箇所でも停止できる。プロセス起動直後の処理や、子プロセスとして起動される処理など</ li >
267+ </ ul >
268+ </ li >
262269</ ul >
263270< h2 > 例</ h2 >
264271< p > < div class ="yata " id ="cdfd92c5191af3d6478f8eb1a7962d801ab47948 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include < a href ="../print.html "> <print></ a > </ span >
Original file line number Diff line number Diff line change 191191 < p class ="text-right "> < small >
192192 最終更新日時:
193193 < time itemprop ="datePublished " class ="js-local-time "
194- datetime ="2026-10-08T14:08:32 +09:00 ">
195- 2026年10月08日 14時08分32秒 (JST)
194+ datetime ="2026-10-09T14:24:38 +09:00 ">
195+ 2026年10月09日 14時24分38秒 (JST)
196196 </ time >
197197 < br />
198198 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -264,6 +264,12 @@ <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに
264264< p > 投げない</ p >
265265< h2 > 備考</ h2 >
266266< ul >
267+ < li > ブレークポイントの設置以外に、デバッガ実行中かどうかでプログラムの動作を切り替える用途がある:< ul >
268+ < li > タイムアウトやウォッチドッグの無効化 : ブレークポイントで停止している間に、時間経過によって通信が切断されるような動作を防ぐ</ li >
269+ < li > 自前のクラッシュハンドラや< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > のキャッチの無効化 : < a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > やシグナルの発生時点でデバッガに制御を渡す</ li >
270+ < li > 診断のための追加の出力、デバッグ用UIの表示、自動保存の無効化</ li >
271+ </ ul >
272+ </ li >
267273< li > 実装は、プログラムがデバッガによって監視されているかどうかを判定するために、必要に応じて即時クエリを実行する</ li >
268274< li > Windowsまたは同等のシステムでは、この関数の動作はWin32関数の< code > ::IsDebuggerPresent()</ code > を呼び出すことで実現できる</ li >
269275< li > POSIX環境では、監視親プロセスをチェックすることで実現できる。その際、監視親プロセスがデバッガであるかどうかは最善の努力で判定する</ li >
You can’t perform that action at this time.
0 commit comments