में "अगर (0)" उन्मूलन को अक्षम करें यदि मैं के अंदर कोड को समाप्त करने से जीसीसी को कैसे रोक सकता हूं (0) ब्लॉक?जीसीसी
if (0)
do_some_debug_printing_and_checking();
तब, जब एक ब्रेकपाइंट मारा जाता है, मैं do_some_debug_printing_and_checking पर क्लिक करें() लाइन:
जब मैं दृश्य स्टूडियो का उपयोग, मेरे डिबगिंग तकनीकों में से एक मेरी कार्यक्रम में इस तरह कोड डाल करने के लिए है , "अगला कथन सेट करें" का चयन करें और इसे निष्पादित करने के लिए मजबूर करें।
जब मैं बैक एंड के रूप में जीसीसी/जीडीबी का उपयोग करता हूं, तो "अगला अगला कथन" अब काम नहीं करता है, क्योंकि जीसीसी बस के अंदर से कोड को हटा देता है अगर (0) कथन।
मैं निश्चित रूप से -O0 अनुकूलन अक्षम करने के लिए ध्वज का उपयोग कर रहा हूं। मैंने -fno-dce -fno-tree-dce स्पष्ट रूप से मृत कोड उन्मूलन को अक्षम करने के लिए झंडे की कोशिश की है, लेकिन इसका कोई प्रभाव नहीं है: की सामग्री यदि (0) बाइनरी फ़ाइल में मौजूद नहीं है और मैं का उपयोग नहीं कर सकते हैं इसके आगे बढ़ने के लिए अगले कथन सेट करें।
क्या को हटाने के लिए जीसीसी को बताने का कोई अच्छा तरीका है (0) सामग्री?
संपादित करें:
- यह अभी भी
- कोड की एक अतिरिक्त पंक्ति यह जीत लिया है:
"अतिरिक्त चर" वैकल्पिक हल के लिए धन्यवाद, लेकिन वहाँ 2 बातें मैं इसके बारे में पसंद नहीं है कर रहे हैं रिलीज संस्करण बनाने पर स्वचालित रूप से ऑप्टिमाइज़ नहीं किया जाएगा और उन डीबग चीजों को गायब करना चाहते हैं। निश्चित रूप से मैं # ifdef-s का उपयोग कर सकता हूं, लेकिन यह और भी अतिरिक्त लाइनें है।
वास्तव में, जीसीसी को उस मृत कोड को रखने के लिए बिल्कुल कोई विकल्प नहीं है?
मैं जानता हूँ कि यह नहीं है कि तुम क्या पूछ रहे थे, लेकिन कोशिश अपने आईएफएस के लिए झूठी पर वैश्विक वैरिएबल सेट का उपयोग करना। इस तरह संकलक आपके बयान को अनुकूलित नहीं करेगा। –
जब आप उस फ़ंक्शन को चलाने के लिए जीडीबी में बस do_some_debug_printing_and_checking() 'कॉल नहीं करते हैं? – Mat