2016-08-08 8 views

उत्तर

11

Q_ASSERT एक कस्टम ज़ोर मैक्रो जो माना जाता है कि मानक assert समारोह को बढ़ाता है।

त्रुटि संदेश द्वारा qFatal(), जो मानक ज़ोर मैक्रो की तुलना में कुछ प्लेटफार्मों पर थोड़ा बेहतर व्यवहार कर सकते हैं नियंत्रित किया जाता है। उदाहरण के लिए विंडोज़ पर यह उस बिंदु पर विजुअल स्टूडियो डीबगर को ट्रिगर करेगा जहां दावा abort() पर कॉल करने के बजाय विफल रहता है।

तुम भी क्यूटी त्रुटि संदेश कार्यों का उत्पादन अनुप्रेषित कर सकते हैं इस तरह के qFatal अपना कस्टम संदेश हैंडलर के लिए (qInstallMessageHandler() के साथ) के रूप में। यह उदाहरण के लिए उपयोगी हो सकता है यदि आप त्रुटियों को किसी फ़ाइल में रीडायरेक्ट करना चाहते हैं।

भी ध्यान रखें कि Q_ASSERT साथ अक्षम किया गया है मैक्रो QT_NO_DEBUG (जबकि assertNDEBUG रूप से अक्षम है): यह आपके क्यूटी से संबंधित कोड और बाकी के बीच इस बात पर ज़ोर अलग करने के लिए इस्तेमाल किया जा सकता।

+0

एक साइड नोट पर यदि आप मैक्रोज़ के काम पर कस्टम कैसे काम करते हैं और वे उपयोगी क्यों हैं, तो अधिक विस्तृत स्पष्टीकरण चाहते हैं, _Game प्रोग्रामिंग Gems_ में स्टीव राबिन द्वारा ** ** पर जोर से निचोड़ना ** – Louen

3

बहुत ही दस्तावेज़ से:

यह अगर QT_NO_DEBUG संकलन के दौरान परिभाषित किया गया था कुछ नहीं करता है।

तो, इसके बारे में सोचो: Q_ASSERTNDEBUG के अभाव पर निर्भर नहीं है, assert है। #ifndef NDEBUG को कुछ भी करने के लिए assert() के लिए आवश्यक है और अक्सर उपयोगकर्ता (और संभवतः पुस्तकालय ..?) कोड में अन्य सामान्य डीबग-केवल चीजों को निर्धारित करने के लिए भी उपयोग किया जाता है।

एक अलग मैक्रो का उपयोग करना, जो लोग केवल क्यूटी संबंधित चीज़ों को डिबग करने के लिए चाहते हो जाएगा के लिए एक फायदा है NDEBUG छोड़ने अपरिभाषित है और इस तरह नीचे वजन डिबग-केवल सामान के साथ कोड के बाकी है कि कार्यक्रम यदि NDEBUG ब्लोट जाएगा बिना परिभाषित नहीं किया गया है, विशेष रूप से assert() एस।

तो, आप -DNDEBUG लेकिन साथ संकलन नहीं कर सका-DQT_NO_DEBUG आप रिलीज मोड अर्थ विज्ञान के साथ 'सामान्य' चीजों को संकलित करने, लेकिन अभी भी क्यूटी सामान को डिबगिंग लागू चाहते थे।

जटिल जीयूआई अनुप्रयोग विकसित करते समय यह निश्चित रूप से बहुत उपयोगी है। मैं क्यूटी का उपयोग नहीं करता (अभी तक?) लेकिन जीटीके +/gtkmm [... जो कि मुझे यकीन है कि मेरे अस्तित्व के टूलकिट्स में ऐसी चीजों का उपयोग करने का लाभ देखें ... लेकिन मैंने अभी तक उन्हें नहीं देखा है ;-)]

मैं यहाँ इस पर हाल ही में एनिमेटेड चर्चा याद है, एक orthogonal प्रस्ताव की चर्चा के साथ interwoven: ISO C++ Standard - Future Proposals › Exception stack trace information.

+0

हाँ मैंने देखा कि विभिन्न डीबग परिभाषित करता है, मैं सोच रहा था कि इसमें कुछ और था या नहीं। लेकिन यह संभावना है कि यह संभावना है। – Zitrax