2012-10-06 23 views
7

के लिए कोर फ़ाइल बनाने में असमर्थ मैं उबंटू 12.04 एलटीएस का उपयोग कर रहा हूं। दुर्घटनामेरे क्रैश किए गए प्रोग्राम

// null.c 
#include<stdio.h> 

int main() 
{ 
    int *p = NULL; 
    int k=*p; 
    printf("%d",sizeof(0)); 
    return 0; 
} 

अब मैं के साथ "जीसीसी जी null.c" और फिर "./a.out" रन बनाने के लिए इस प्रकार है और उत्पादन की उम्मीद है के रूप में के रूप में मैं एक साधारण प्रोग्राम लिखा था।

Segmentation fault (core dumped) 

अब मैं जीडीबी का उपयोग कर कोर डंप फ़ाइल देखना चाहता हूं। मैं निम्नलिखित बातें

  1. मैं वर्तमान निर्देशिका जाँच किया था, वहाँ कोई कोर डंप फ़ाइल
  2. मैंने कोशिश की/proc/sys/कर्नेल/कोर। सामग्री "% ई के साथ core_pattern बदलने की कोशिश की है।% पी "। लेकिन मैं फाइल में लिखने में सक्षम नहीं हूं। यह कह रहा है "Fsync विफल"।
  3. मैंने "सुडो वी/proc/sys/कर्नेल/core_pattern" का उपयोग किया। अभी भी फाइल में नहीं लिख सकते हैं।

मैं अपनी वर्तमान निर्देशिका में कोर डंप बनाना चाहता हूं। अब क्या करे?

उत्तर

19

आपका वास्तविक प्रश्न "मेरा कोर डंप कहां है" नहीं है, बल्कि "मैं /proc/sys/kernel/core_pattern कैसे संशोधित कर सकता हूं"।

sudo bash -c 'echo core.%e.%p > /proc/sys/kernel/core_pattern' 

चाल चलाना चाहिए।

+0

यह काम किया ... धन्यवाद :) –

4

आप निम्न आदेश के साथ अपने मूल डंप आकार सीमा समायोजित करने की आवश्यकता:

ulimit -s -c अधिकतम कोर-डंप आकार

मूल्य Kb में दी गई है ।

+0

मैंने इसे सेट किया। लेकिन मैं core_pattern फ़ाइल को कैसे संपादित कर सकता हूं? –

2

आपको कोर पैटर्न का उपयोग करने की आवश्यकता नहीं है। इसकी सिर्फ इतना है कि प्रारूप% ई।% p

में उदासीनता है कि आप क्या करने की जरूरत है असीमित

-C#ulimit और #ulimit -एक

की जाँच करें और यदि मूल फ़ाइल आकार ठीक से सेट किया गया है इस बात की पुष्टि कर रहा है। इसके बाद आप core.pid के रूप में कोर प्राप्त करेंगे।

1

मेरी समझ यह है कि उलिमिट का उपयोग स्थायी नहीं है, यानी यदि आप रीबूट करते हैं तो सीमा 0 पर वापस जाती है। असीमित स्थायी होने के लिए, आपको /etc/security/limits.conf को बदलने की आवश्यकता है। इसी तरह कोर पैटर्न आदि के लिए, /etc/sysctl.conf बदलें।