2009-03-18 18 views
5

VC++ Express 2005のブレークポイント条件をマイコードに追加して、ローカル変数が指定された条件を満たしている場合にのみブレークポイントがトリガーするようにします。例えばVisual C++で条件付きブレークポイントを追加する方法

bool my_test(UIDList test_list) { 
    foo(test_list); 
    bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
    print(test_list); 
} 

は、右クリック私のブレークポイントに、選択した「条件は...」私は私がやりたいように見えるダイアログ、私は次のエラーのテキストフィールドの結果に入力してみてくださいしかし、何かを発見したました:

Unable to evaluate the breakpoint condition: CX0052: Error: member function not present

私はヘルプドキュメントを試しましたが、私の答えが見つかりませんでした。私はVC++で経験した人が正しい方向に向かうかもしれないことを期待しています...

これまでVC++ Expressの最新バージョンにアップグレードしようとしましたが、プロジェクトはきれいにインポートされませんでした。プロジェクトの複雑さと私の現在の時間スケールのため、私はこの時点でソリューションとしてアップグレードすることはできません。

答えて

8

DebugBreak();機能:

bool my_test(UIDList test_list) { 
    foo(test_list); 
    if (bar(test_list) /* or whatever check :) */) // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
     DebugBreak(); 
    } 
    print(test_list); 
} 

それとも、いつもVSは、私は決して可能性など、いくつかのマイクロ評価変数のウォッチウィンドウでengines-、イミディエイトウィンドウ、ブレークポイントの条件を持っているのassert(表現)

bool my_test(UIDList test_list) { 
    foo(test_list); 
    bar(test_list); 
    assert(test_list.Length() > 0); // will break here 
    print(test_list); 
} 
4

ブレークポイントの条件では、私が知る限りメソッドを呼び出すことはできません。それで、あなたがする必要があるのは手前の長さを計算することです。このようなもの。

 
 
bool my_test(UIDList test_list) { 
foo(test_list); 
int i = test_list.Length(); 
bar(test_list); // I have a breakpoint here, but only want it to trigger if test_list.Length() > 0 
print(test_list); 
} 
 

は、ここではiの値に条件付きブレークポイントを入れて、あなたは問題ないはずです。

10

を使用することができますまともなドキュメントを見つけてください。私が言うことができる限り、彼らは電話をかけたい方法については気難しいです、しかし、彼らはまた、アクセスの制限に鈍感です。
だから、あなたはおそらく

test_list.m_nLength > 0 

(またはものは何でもあなたのプライベート長varがある)のようなものに

test_list.Length() > 0 

からあなたの条件を言い換えることができます。

(EDIT)ちょうどthis msdn pageがデバッガが処理できる表現と説明できないことを説明しています。だから、最初、indeed -

'The debugger can access all class members regardless of access control. You can examine any class object member, including base classes and embedded member objects.'

そして第二に、私の推測で評価するの失敗について '長さ()' - それはおそらく、インライン化されました:

'A debugger expression cannot call an intrinsic or inlined function unless the function appears at least once as a normal function.'

関連する問題