2011-10-12 17 views
7

का उपयोग करके इसे उत्पन्न करते समय कोर डंप फ़ाइल के आकार को सीमित करने के लिए कैसे करें मैं एआरएम 9 बोर्ड पर एक एम्बेडेड एप्लिकेशन चला रहा हूं, जहां कुल फ़्लैश आकार केवल 180 एमबी है। मैं gdb चलाने के लिए सक्षम हूँ, लेकिन मैं एक त्रुटिजीडीबी

warning: Memory read failed for corefile section, 1048576 bytes at 0x4156c000. 
warning: Memory read failed for corefile section, 1048576 bytes at 0x50c00000. 
Saved corefile core.5546 
The program is running. Quit anyway (and detach it)? (y or n) [answered Y; input not from terminal] 
Tamper Detected 
**********OUTSIDE ifelse 0********* 
length validation is failed 

मैं भी ulimit -c 50000 सेट, लेकिन अभी भी कोर डंप इस सीमा से अधिक मिलता है जब मैं

(gdb) generate-core-dump

है। जब मैं फ़ाइल आकार की जांच करने के लिए ls -l करता हूं तो यह 300 एमबी से अधिक है। इस मामले में मुझे कोर डंप के आकार को कैसे सीमित करना चाहिए?

उत्तर

8

जीडीबी 'ulimit -c' का सम्मान नहीं करता है, केवल कर्नेल करता है।

यह स्पष्ट नहीं है कि आप लक्ष्य बोर्ड पर जीडीबी चलाते हैं, या एक विकास मेजबान (और लक्ष्य पर gdbserver का उपयोग कर)। आपको शायद बाद वाले का उपयोग करना चाहिए, जो आपको पूर्ण कोर डंप एकत्र करने की अनुमति देगा।

कटा हुआ कोर डंप एक दर्द है, वैसे भी अक्सर समस्या को डीबग करने के लिए आपको आवश्यक जानकारी नहीं होगी।

+0

मैं लक्ष्य बोर्ड पर जीडीबी चला रहा हूं। मैं gdbserver का भी उपयोग कर सकता हूं, लेकिन चूंकि दुर्घटना आसानी से पुन: उत्पन्न नहीं होती है, इसलिए मैं पहले विकल्प के साथ जा रहा हूं। –

+1

क्षमा करें, लेकिन मैं नहीं देख सकता कि कैसे क्रैश के साथ कुछ भी करने के लिए gdb या gdbserver को आसानी से पुन: उत्पन्न किया जा रहा है या नहीं? – shodanex

+0

@shodanex - क्लाइंट-सर्वर मॉडल का उपयोग करके कोर को "मेजबान" फ़ाइल सिस्टम पर एकत्र किया जा सकता है, एम्बेडेड सिस्टम पर नहीं, जिसमें कोर फ़ाइल के लिए केवल 180 एमबी उपलब्ध स्थान है। संभवतः होस्ट सिस्टम में एक पूर्ण एचडीडी है, और यह एक बहुत बड़ी कोर फ़ाइल को सहेजने में सक्षम है। – Peter

0

आपने ulimit -c का उपयोग कब किया? इस कार्यक्रम को शुरू करने से पहले इसका उपयोग किया जाना चाहिए जिसके लिए आप कोर डंप उत्पन्न कर रहे हैं, और उसी सत्र के अंदर।

+0

मैंने जीडीबी चलाने से पहले उलिमिट सेट किया था। मैंने 'ulimit -c 50000' को /etc/rc.d/init.d/startup में रखा है और मैंने मैन्युअल रूप से 'ulimit -a' का उपयोग करके भी जांच की है और इसे ठीक से सेट किया गया था। –

4
अपने खोल rc-फ़ाइल में

:

limit coredumpsize 50000    # or whatever limit size you like 

है कि सब कुछ के लिए सीमा निर्धारित करना चाहिए, GDB

सहित

नोट:

आप 0 के लिए सेट हैं, तो आप सुनिश्चित कर सकते अपने घर निर्देशिका कोर डंप फ़ाइलों के साथ cluttered नहीं है।