2009-11-19 7 views
18

एक लिनक्स मशीन बूटिंग और चलने वाले सॉफ़्टवेयर (कस्टम ड्राइवर सहित) के कुछ घंटों बाद जमा हो जाती है। मैं ऐसी समस्या को डीबग करने के लिए एक तरीका देख रहा हूं। हाल ही में, लिनक्स कर्नेल डीबगिंग तकनीकों में महत्वपूर्ण प्रगति हुई है, है ना?वर्तमान लिनक्स कर्नेल डीबगिंग तकनीक

मैं कृपया इस विषय पर कुछ अनुभव साझा करने के लिए कहता हूं।

+0

@ टिंकर्टिम: आपका मतलब है कि यह पर्याप्त नहीं है? सिस्टमप्रैप के संदर्भ के लिए :) – leppie

उत्तर

5

SystemTap लिनक्स के लिए लगता है कि डोलस सोलारिस के लिए क्या है .. हालांकि मुझे इसका उपयोग करने के लिए शत्रुतापूर्ण लगता है। फिर भी, आप इसे आज़मा सकते हैं। एनबी: डीबग जानकारी के साथ कर्नेल संकलित करें और कर्नेल उपकरण हुक के साथ कुछ समय बिताएं।

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

मैं इसकी सिफारिश नहीं कर रहा हूं, बस यह इंगित कर रहा हूं कि यह मौजूद है। मैं कुछ अंतर्निहित सुंदरता की सराहना करने के लिए पर्याप्त स्मार्ट नहीं हो सकता .. मैं अजीब उपकरणों के लिए ड्राइवर लिखता हूं।

+1

+1। उम्मीद तो दिखती है। मैं इन प्रिंटक लोगों में से एक हूं। – dmeister

2

ऐसी समस्याओं के आधार पर कई और विविध तकनीकें हैं जिन्हें आप डिबग करना चाहते हैं। आपके मामले में पहला सवाल यह है कि "क्या सिस्टम वास्तव में जमे हुए है?"। आप जादू sysrq कुंजी को सक्षम कर सकते हैं और सिस्टम स्थिति को फ्रीज पर जांच सकते हैं और वहां से जा सकते हैं।

शायद सबसे सीधी शक्तिशाली विधि कर्नेल डीबगर को सक्षम करने और एक धारावाहिक केबल के माध्यम से कनेक्ट करने के लिए है।

6

यदि आप समस्या को वीएम के अंदर पुन: उत्पन्न कर सकते हैं, तो वास्तव में एक बिल्कुल नई (AFAIK) तकनीक है जो उपयोगी हो सकती है: होस्ट मशीन से वर्चुअल मशीन को डीबग करना। Debugging Linux Kernel in VMWare with Windows host

VMware कार्य केंद्र 7 भी एक शक्तिशाली तकनीक आप रिकॉर्ड प्रणाली निष्पादन देता है कि निर्धारणात्मक और फिर इसे फिर से चलाने के, के रूप में वांछित भी पीछे की ओर सक्षम बनाता है:

उदाहरण इस बात के लिए देखें। तो जैसे ही सिस्टम दुर्घटनाग्रस्त हो जाता है, आप पीछे की तरफ जा सकते हैं और देख सकते हैं कि क्या हो रहा था (और कुछ भी बदलने की कोशिश करें और देखें कि यह अभी भी दुर्घटनाग्रस्त है या नहीं)। आईआईआरसी मैंने कहीं पढ़ा है, आप इसे नहीं कर सकते हैं और एक ही समय में वीएमवेयर/जीडीबी का उपयोग कर कर्नेल डीबग कर सकते हैं।

जाहिर है, आपको इसके लिए एक वीएमएम चाहिए। मुझे नहीं पता कि वीएमएम के वीएमएम परिवार के अलावा वीएमएम क्या है, और मुझे नहीं पता कि कोई भी मुफ्त वीएमवेयर संस्करण इसका समर्थन करता है या नहीं। संभावना नहीं है; कोई वास्तव में एक वाणिज्यिक कंपनी से सबकुछ मुफ्त में देने की उम्मीद नहीं कर सकता है। परीक्षण संस्करण 30 दिन है।

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

+0

नोट करें कि इसे वीएम के अंदर किसी भी तरह के डीबग समर्थन को सक्षम करने की आवश्यकता नहीं है; वीएम स्वयं निर्विवाद है और सैद्धांतिक रूप से पूरी तरह से अनजान है कि इसे डीबग किया जा रहा है। इसके बजाए, वर्कस्टेशन में जीडीबी स्टब सीधे बनाया गया है जो वर्चुअलाइज्ड सीपीयू को नियंत्रित करता है। – Paul

0

मैं इस तरह की बग कैसे डिबग करता हूं, वर्चुअलबॉक्स के अंदर अपना ओएस चलाने के लिए, और कर्नेल को kgdb buildin के साथ संकलित करना था। फिर मैं वर्चुअलबॉक्स पर एक सीरियल कंसोल सेट करता हूं ताकि मैं वर्चुअलबॉक्स के ओएस के अंदर सीरियल कंसोल के माध्यम से कर्नेल को जीडीबी कर सकूं। कभी भी ओएस लटका, बस जादू sysrq कुंजी की तरह, मैं उस बिंदु पर कर्नेल को रोकने और समझने के लिए gdb पर ctrl-c दर्ज कर सकता हूं।

आम तौर पर कर्नेल स्टैक ट्रेसिंग अपराधी प्रक्रिया को इंगित करना बहुत मुश्किल है, इसलिए मुझे लगता है कि सबसे अच्छा तरीका अभी भी सामान्य "शीर्ष" कमांड है, यह देखने के लिए कि एप्लिकेशन लटकने का कारण क्या है - यह देखने की आवश्यकता होगी पाठ्यक्रम के लॉग देखने के लिए एक रिबूट।

0

एक विकल्प Kprobes का उपयोग करना है। Google पर एक त्वरित खोज आपको आवश्यक सारी जानकारी दिखाएगी। इसका उपयोग करना विशेष रूप से कठिन नहीं है। Kprobes आईबीएम द्वारा बनाया गया था मैं कर्नेल डीबगिंग के लिए एक समाधान के रूप में विश्वास करता हूँ।यह अनिवार्य रूप से प्रिंटक का एक विस्तृत रूप है() हालांकि यह आपको हैंडलर का उपयोग करके डालने वाले किसी भी "ब्रेकपॉइंट्स" को संभालने की अनुमति देता है। यह हो सकता है कि आप क्या खोज रहे हैं। आपको केवल कर्नेल में एक मॉड्यूल लिखना और 'इंसमोड' करना है जो मॉड्यूल में निर्दिष्ट किसी भी "ब्रेकपॉइंट्स" हिट को संभालेगा।

आशा है कि यह एक उपयोगी विकल्प हो सकता है ...

संबंधित मुद्दे