2009-12-09 9 views
10

में FUSE फाइल सिस्टम क्रैश डीबग कैसे करें वर्तमान में मैं सी भाषा में लिनक्स (2.6 कर्नेल) में FUSE फाइल सिस्टम मॉड्यूल का उपयोग कर एक एप्लिकेशन विकसित कर रहा हूं। कुछ प्रोग्रामिंग त्रुटि के कारण, फाइल सिस्टम को आरोहित करने के बाद एप्लिकेशन क्रैश हो जाता है। चूंकि मैं लिनक्स/सी पर्यावरण में नौसिखिया डेवलपर हूं। क्या आप कृपया मुझे ऐसे कार्यक्रमों को डीबग करने के लिए संभावित विकल्प बता सकते हैं?लिनक्स

+0

आपका क्या मतलब है "उपयोग"? क्या आप फ्यूज तंत्र या कुछ और के आधार पर उपयोग स्पेस फ़ाइल सिस्टम को लागू करने का प्रयास कर रहे हैं? –

+4

+1 - एफयूएसई डीबग करने के लिए दर्द का थोड़ा सा हो सकता है। –

+0

@arsane, हाँ मैं FUSE के आधार पर उपयोगकर्ता स्पेस फ़ाइल सिस्टम को कार्यान्वित कर रहा हूं। – Hrishi

उत्तर

6

सबसे पहले, सुनिश्चित करें कि आप डीबगिंग प्रतीकों सक्षम (-g विकल्प gcc) के साथ संकलित कर रहे हैं। तब

ulimit -c unlimited 

जब अनुप्रयोग क्रैश हो जाता है, यह एक core फ़ाइल वर्तमान कार्यशील निर्देशिका में (के रूप में यह यह करने के लिए लिख सकते हैं जब तक) छोड़ देंगे: इससे पहले कि आप अपने कार्यक्रम चलाने के लिए, सक्षम कोर शेल कमांड के साथ उदासीनता।

फिर आप gdb डीबगर में कोर फ़ाइल को लोड कर सकते हैं:

gdb <executable file> <core file> 

... और यह तुम्हें दिखाता हूँ जहाँ यह दुर्घटनाग्रस्त हो गया है, और आप इसके आगे चर की जांच करने और करते हैं।

2

आप FUSE के साथ Valgrind का उपयोग कर सकते हैं, हालांकि read this first एक सेट्यूड कार्य के बारे में जानने के लिए। मैं वास्तव में अन्य जो मेरी फाइल सिस्टम डिबग करने के लिए आवश्यकता हो सकती है के लिए एक सुविधा के रूप निम्न कार्य करें:

#include <valgrind/valgrind.h> 

if (RUNNING_ON_VALGRIND) { 
    fprintf(stderr, 
     "******** Valgrind has been detected by %s\n" 
     "******** If you have difficulties getting %s to work under" 
     " Valgrind,\n" 
     "******** see the following thread:\n" 
     "******** http://www.nabble.com/valgrind-and-fuse-file-systems" 
     "-td13112112.html\n" 
     "******** Sleeping for 5 seconds so this doesn't fly by ....", 
      progname, progname); 
    sleep(5); 
    fprintf(stderr, "\n"); 
} 

मैं फ्यूज एक बहुत पर काम .. और समय का 90% मेरी दुर्घटनाओं एक रिसाव का कारण बनता है जो की वजह से कर रहे हैं ओओएम हत्यारा कार्रवाई करने के लिए, एक खराब सूचक, दोहरी मुक्त(), आदि का उल्लंघन करना वालग्रिंड इसे पकड़ने के लिए एक महान उपकरण है। जीडीबी सहायक है, लेकिन मुझे Valgrind अनिवार्य पाया है।

+0

वह लिंक टूटा हुआ है –

+0

लेकिन यह काम करता है: http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/5224 –

6

-d विकल्प के साथ अपने फ़्यूज़ क्लाइंट को चलाएं।

8

मुझे पता है कि यह सवाल बहुत पुराना है, लेकिन यदि आप -f स्विच का उपयोग करते हैं तो यह अग्रभूमि में चलाएगा, जो डिबगिंग के लिए बहुत उपयोगी है। -s स्विच मल्टीथ्रेडिंग को अक्षम करता है, जो भी बहुत उपयोगी है।

मैं वर्तमान में एक फ्यूज ड्राइवर के विकास कर रहा हूँ और यह पेज बहुत मददगार दिया गया है: http://www.cs.hmc.edu/~geoff/classes/hmc.cs135.201109/homework/fuse/fuse_doc.html

के शब्दों में:

आपका printf/fprintf डिबगिंग कोड Printf केवल यदि आप के साथ चलाने के लिए काम करेंगे - एफ स्विच। अन्यथा, फ्यूज stdout और stderr डिस्कनेक्ट करता है।

+0

पॉइंटर के लिए धन्यवाद। जहां तक ​​मैं देख सकता हूं, यह सबसे उपयोगी उत्तर है। –

0

यूएमएल लिनक्स कर्नेल के जेनेरिक भागों को फाइल सिस्टम, शेड्यूलिंग के रूप में डीबग करने के लिए बहुत अच्छा है, लेकिन हार्डवेयर प्लेटफ़ॉर्म या कर्नेल के ड्राइवर विशिष्ट भाग नहीं हैं।

http://www.csee.wvu.edu/~katta/uml/x475.html

http://valerieaurora.org/uml_tips.html

और आरेख ध्यान को देख:

Image result for FUSE filesystem

आप आवेदन "हैलो" जो सभी फ्यूज कॉलबैक हैंडलर्स लागू कर रहा है देखेंगे। इसलिए अधिकांश डिबगिंग उपयोगकर्तास्पेस प्रोग्राम में है, क्योंकि FUSE कर्नेल मॉड्यूल (और libfuse) का उपयोग सामान्य रूप से सभी FUSE फाइल सिस्टम द्वारा किया जाना है।