visual studio - std:: स्ट्रिंग के साथ सशर्त ब्रेकपॉइंट कैसे बनाएं




visual-studio debugging (6)

मान लीजिए मेरे पास यह कार्य है:

std::string Func1(std::string myString)
{
   //do some string processing 
   std::string newString = Func2(myString)
   return newString;  
}

जब newString का विशिष्ट मान होता है तो मैं सशर्त ब्रेक कैसे सेट newString ? (स्रोत को बदलने के बिना)

एक शर्त सेट करना newString == "my value"

ब्रेकपॉइंट्स को एक त्रुटि के साथ अक्षम नहीं किया गया "ओवरलोडेड ऑपरेटर नहीं मिला"


VS2012:

मैंने अभी नीचे दी गई स्थिति का उपयोग किया क्योंकि newString._Bx._Ptr (जैसा कि ओबीवांडो के उत्तर में) अवैध स्मृति का संदर्भ दिया गया

strcmp( newString._Bx._Buf, "my value")==0

और यह काम किया ...


कुछ खोज ऐसा करने के लिए किसी भी तरह से चालू करने में विफल रही है। सुझाए गए विकल्प आपके कोड में परीक्षण डालना और मानक ब्रेकपॉइंट जोड़ना है:

if (myStr == "xyz")
{
    // Set breakpoint here
}

या व्यक्तिगत चरित्र तुलना से अपना परीक्षण तैयार करने के लिए। स्ट्रिंग में अलग-अलग वर्णों को भी देखना थोड़ा सा पागल है; विजुअल स्टूडियो 2005 में मुझे सदस्य चर जैसे खोदना पड़ा

myStr._Bx._Buf[0] == 'x' && myStr._Bx._Buf[1] == 'y' && myStr._Bx._Buf[2] == 'z'

इन दृष्टिकोणों में से कोई भी बहुत संतोषजनक नहीं है। हमें मानक पुस्तकालय की सर्वव्यापी सुविधा के लिए बेहतर पहुंच प्राप्त करनी चाहिए।


विजुअल स्टूडियो 2010/2012 में एक बहुत आसान तरीका है।

एएनएसआई में जो खोज रहे हैं उसे पूरा करने के लिए इसका उपयोग करें:

strcmp(newString._Bx._Ptr,"my value")==0 

और यूनिकोड में (यदि नया स्ट्रिंग यूनिकोड था) इसका उपयोग करें:

wcscmp(newString._Bx._Ptr, L"my value")==0 

तुलना करने की तुलना में आप और अधिक चीजें कर सकते हैं, आप यहां इसके बारे में अधिक पढ़ सकते हैं:

http://blogs.msdn.com/b/habibh/archive/2009/07/07/new-visual-studio-debugger-2010-feature-for-c-c-developers-using-string-functions-in-conditional-breakpoints.aspx


वीएस2015 में आप कर सकते हैं

newstring[0]=='x' && newString[1]=='y' && newString[2]=='z'

स्ट्रिंग की तुलना करना वर्णों की तुलना करने से बेहतर काम करता है

strcmp(name._Mypair._Myval2._Bx._Buf, "foo")==0

यह काम करता है, लेकिन उपयोग करने के लिए बहुत असुविधाजनक है और त्रुटि प्रवण है।

name._Mypair._Myval2._Bx._Buf[0] == 'f' && 
name._Mypair._Myval2._Bx._Buf[1] == '0' && 
name._Mypair._Myval2._Bx._Buf[2] == '0'

@ ओबीवांडो (लगभग) में समाधान है , लेकिन जैसा कि कई टिप्पणियां सही मायने में बताती हैं , वास्तविक बफर स्ट्रिंग आकार पर निर्भर करता है; मैं थ्रेसहोल्ड होने के लिए 16 देखता हूं। उचित बफर कार्यों पर strcmp को एक आकार की जांच तैयार करना।

newString._Mysize < 16 && strcmp(newString._Bx._Buf, "test value") == 0

या

newString._Mysize >= 16 && strcmp(newString._Bx._Ptr, "ultra super long test value") == 0






conditional-breakpoint