2009-03-18 16 views
5

में एक सशर्त ब्रेकपॉइंट जोड़ने के लिए कैसे मैं वीसी ++ एक्सप्रेस 2005 में अपने कोड में ब्रेकपॉइंट स्थिति जोड़ना चाहता हूं, ताकि ब्रेकपॉइंट केवल तभी ट्रिगर हो जब कोई स्थानीय चर निर्दिष्ट मानदंडों को पूरा करता हो। जैसेविजुअल सी ++

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

मैंने सहायता दस्तावेज़ों की कोशिश की, लेकिन मुझे मेरा जवाब नहीं मिला। मुझे उम्मीद है कि वीसी ++ में अनुभवी कोई व्यक्ति मुझे सही दिशा में इंगित करने में सक्षम हो सकता है ...

मैंने पहले वीसी ++ एक्सप्रेस के एक नवीनतम संस्करण में अपग्रेड करने का प्रयास किया है, लेकिन परियोजना स्पष्ट रूप से आयात नहीं हुई है। परियोजना की जटिलता और मेरे वर्तमान समय के पैमाने के कारण मैं इस बिंदु पर समाधान के रूप में उन्नयन पर विचार नहीं कर सकता।

उत्तर

8

डीबगब्रैक() का उपयोग करें; समारोह:

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); 
} 

या आप हमेशा ज़ोर (अभिव्यक्ति) का उपयोग कर सकते

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); 
} 
 

यहाँ मैं के मूल्य पर एक सशर्त ब्रेकप्वाइंट रखो और आप ठीक होना चाहिए।

10

वी.एस., चर घड़ी खिड़कियां, तत्काल विंडो में कुछ सूक्ष्म मूल्यांकन इंजन-राशि बिंदु की स्थिति को तोड़ने करता है आदि मैं कभी नहीं कर सकता उन पर सभ्य दस्तावेज खोजें। जहां तक ​​मैं कह सकता हूं कि वे उन विधियों के बारे में पसंद करते हैं जिन्हें वे कॉल करने के इच्छुक हैं, लेकिन वे सीमाओं तक पहुंचने के लिए भी असंवेदनशील हैं।
तो, आप शायद अपनी हालत से

test_list.Length() > 0 

कुछ करने के लिए की तरह

test_list.m_nLength > 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.'

और दूसरा, विफलता का मूल्यांकन करने के बारे में मेरा अनुमान है 'की लंबाई()' - यह शायद inlined गया था:

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