また、条件付きブレークポイントは高価であり、あなたと同じ結論に達したことに気づきました。ブレークポイントを無効にすると速度が低下する理由は想像できません。これはエディターのみのものであり、必要に応じてブレークポイントをオンにするためのショートカットであると予想されるためです。
私があなたのような状況にあるときに私がすることは、assertマクロを作成することです。(Visual Studioが提供するassertマクロを使用できますが、私はそれが好きではありません)。マクロに必要な条件をチェックさせ、失敗した場合はDebugBreakを呼び出します。アプリケーションのリリース、またはチェックされていないビルドでは、assertは何も評価されないため、コードは影響を受けません。
単純なアサートマクロは次のようになります。
#ifdef _DEBUG
#define assert(x)\
do{\
if(!(x)){DebugBreak();}\
}while(0)
#else
#define assert(x)
#endif
そしてそれを次のように呼びます:
assert(pValue != NULL && "A bad parameter was passed to the function");
DebugBreakの前に失敗にさらにコードを入れることができます(#xで失敗した条件、および/またはメッセージをダブルクリックできるように____FILE____と____LINE ____で行/ファイル番号を出力するなど)。OutputDebugStringを使用してデバッグログにメッセージを書き込み、さらにデバッガーがIsDebuggerPresentに接続されているかどうかを確認して、アサーションをさらに調整することができます。また、&&文字列形式を使用して、特定のアサーションに関するもう少し情報を提供するのも好きです。
assertを使用する際に注意すべき点がいくつかあります。まず、非デバッグビルドで削除されるため、マクロで実行する必要のあるコードを配置しないでください。同じ理由で、副作用のあるコードを入れないでください。また、デバッガーが接続されていないときにDebugBreak()を呼び出さないでください。これは、デバッガーが本質的に例外をスローし、キャッチされない場合はアプリケーションを終了するためです。