मैं अपने कार्यक्रम में असफल आक्रमणों को पकड़ने का प्रयास कर रहा हूं। मैं एक लाइब्रेरी का उपयोग कर रहा हूं जो एक कस्टम फ़ंक्शन या मैक्रो के बजाय() को प्रत्यक्ष कॉल करता है, और यह इस लाइब्रेरी के भीतर है, मैं वर्तमान में कई पोर्टिंग-संबंधित बग का पता लगाने की कोशिश कर रहा हूं। शामिल सब कुछ g ++ में डीबग प्रतीकों के साथ संकलित किया गया है।जीडीबी में असफल आक्रमणों को तोड़ने का सही तरीका क्या है?
मुझे मिला सबसे अच्छा समाधान फाइल पर तोड़ रहा है: जोरदार अभिव्यक्ति की स्थिति के साथ, जोरदार रेखा। यह असफल होने से पहले जोर से रोकने की अनुमति देता है, लेकिन यह एक भयानक समाधान है। इसे प्रत्येक संभवतः असफल असर के लिए विशेष सेटअप की आवश्यकता है, मेरे आईडीई से काम नहीं करेगा, और सामान्य रूप से बहुत अधिक प्रयास है।
मैं कैसे किसी भी पर तोड़ सकते हैं ज़ोर इस तरह से कि ज़ोर कॉल के दायरे के भीतर callstack और चर की परीक्षा की अनुमति देता है में gdb & जीसीसी का उपयोग कर में विफल रहा है?
यह बेहतर होगा अगर समाधान ने मुझे जोर की विफलता को त्यागने और चलना जारी रखा।
विजुअल स्टूडियो में विंडोज़ पर, ब्रेकिंग असफल 'जोर' का डिफ़ॉल्ट व्यवहार है। मुझे हैरान है कि * निक्स दुनिया में मामला नहीं है - आम तौर पर असफल 'जोर' क्या करता है? – Angew
प्रोग्राम चलाने से पहले, gdb में, आप फ़ंक्शन abort() पर ब्रेकपॉइंट जोड़ने के लिए 'ब्रेक अपोर्ट' (या बस 'बी abort') का उपयोग कर सकते हैं। इससे कम से कम एक बैकट्रैक बनने देगा जब कोई दावा विफल हो जाता है (माना जाता है कि यह 'abort()' कहता है, जब कुछ करता है; कुछ कार्यान्वयन इसके बजाय 'बाहर निकलें()' कह सकते हैं)। हालांकि निरंतर निष्पादन के बारे में निश्चित नहीं है। – notmyfriend
आम तौर पर यह डिफ़ॉल्ट रूप से काम करता है, जैसा कि जोर() कॉल निरस्त करता है, और निरंतर उस सिग्नल पर डिफॉल्ट ब्रेक द्वारा SIGABRT सिग्नल और जीडीबी बढ़ाता है, जिससे आप स्टैक का निरीक्षण कर सकते हैं, स्टैक को ऊपर/नीचे ले जा सकते हैं। आपके फ़ंक्शन में जोर() और चर का निरीक्षण करें और इसी तरह। – nos