जब भी मेरी प्रक्रिया दुर्घटनाग्रस्त हो जाती है तो मैं कोर डंप बनाना चाहता हूं। वर्तमान में मैं इस दृष्टिकोण का अनुसरण कर रहा हूं:लिनक्स में कोर डंप
- जीसीसी/जी ++ के "-g" का उपयोग करके प्रोग्राम का एक विशेष "डीबग" संस्करण बनाएं।
- निष्पादित करें "ulimit -c असीमित"
- अब जब भी प्रोग्राम क्रैश हो जाता है तो हमें कोर डंप मिलता है।
- कोर डंप हमेशा बनाया जाना चाहिए:
लेकिन मैं चरणों ताकि की संख्या को कम करना चाहते हैं। भले ही यह "रिलीज" निर्माण हो। मैन्युअल रूप से कमांड को "ulimit -c unlimited
" आदेश निष्पादित करने के लिए नहीं कहा जाना चाहिए।
- कैसे "रिलीज" एक कार्यक्रम के निर्माण में एक कोर डंप बनाने के लिए:
- हमेशा। मैन्युअल रूप से "
ulimit -c unlimited
"
तो मैं दो प्रश्न हैं?
यह समझना महत्वपूर्ण है कि 'जी' और अनुकूलन के स्तर पूरी तरह से संबंधित नहीं हैं महत्वपूर्ण है। '-g' का अर्थ है कि डीबग जानकारी बाइनरी में जोड़ दी जाएगी। इसका मतलब यह नहीं है कि कोड अनुकूलित नहीं किया जाएगा। 'gcc -g -O3 ...' एक पूरी तरह से उचित बात है (समझने के साथ कि कोड डीबग करने के लिए थोड़ा कठिन हो सकता है)। –
ठीक है, क्योंकि कभी-कभी दुर्घटनाओं को पुन: उत्पन्न करना बहुत कठिन होता है। और बग हमेशा अनुमानित नहीं होते हैं, है ना? उस समय मैं जानकारी खोना नहीं चाहता हूं। – Sabya
ऑप्टिमाइज़ेशन के साथ भी, एक स्टैक ट्रेस आमतौर पर सही फ़ंक्शन देता है (यदि आवश्यक नहीं है तो सही रेखा)। यह आमतौर पर दूर नहीं है। कम से कम यह मेरा अनुभव है। – MarkR