と呼ばれる非静的 const メソッドsize_t A::m() const
があります。これを使用して、1 より大きい値を返す場合にブレークポイントをトリガーしたいと考えていclass A
ますa
。
class A
{
public:
std::vector<double> myvec;
size_t m() const
{
return myvec.size();
}
} a;
したがって、この条件で Visual Studio 2013 にブレークポイントを追加します
a.m() > 1 // a is an instance of class A
ただし、これをコンパイルしようとすると、IDE から次のメッセージが表示されます。
次のブレークポイントは設定できません:
myFile.cpp の xxx 行で、'am() > 1' が true の場合
この式には副作用があり、評価されません。
A::m()
は何も変更しないことに注意してください.size()
。ベクトルのメソッドを呼び出してその値を返すだけなので、式に副作用があるという主張は単に偽です。実際、ブレークポイント条件を(つまり、メソッド自体の内容)に置き換えても、同じ効果があります!a.myvec.size() > 1
ブレークポイントで条件として使用できるものについて、マイクロソフトは次のように述べています。
条件は、デバッガーによって認識される任意の有効な式にすることができます。
副作用の一般的な原因の 1 つは、デバッガー ウィンドウで関数呼び出しを評価することです。このような評価は通常顕著です。副作用のより微妙な原因は、マネージ コード内のプロパティおよびその他の暗黙的な関数呼び出しの評価です。
デバッガーは、プロパティの評価または暗黙的な関数呼び出しに副作用があるかどうかを判断できません。したがって、デフォルトでは、デバッガーは暗黙的な関数呼び出しを自動的に評価しません。プロパティの評価は既定で許可されていますが、[オプション] ダイアログ ボックスでオフにすることができます。関数呼び出しまたはプロパティが評価されていない場合は、更新アイコンが表示されます。更新アイコンをクリックすると、式を手動で評価できます。詳細については、「方法: 監視値を更新する」を参照してください。
プロパティの評価または暗黙的な関数呼び出しがオフになっている場合は、ac 形式修飾子を使用して強制的に評価できます (C# のみ)。C# の書式指定子を参照してください。
誰かが上記の段落を英語に翻訳できれば、それは素晴らしいことです. これらのデバッガ条件に関数を入れることはできますか?