2011-02-14 11 views
10

क्या लिनक्स कर्नेल में प्रिंटआउट डीबग करने का कोई बेहतर तरीका है?लिनक्स-कर्नेल डीबग प्रिंटआउट?

printk(KERN_DBG "%s:%d - %s() <message>", __FILE__, __LINE__, __FUNCTION__); 

जो बहुत साफ नहीं है:

अभी के साथ कोड कचरा।

पूरी पंक्ति #ifdef होने के लिए एक तरीका होना चाहिए: कुछ अच्छे तरीके से एड।

+0

शायद आप [इस सवाल] पर एक नज़र डाल सकते हैं (http://stackoverflow.com/questions/4943857/linux- कर्नेल- लाइव-debugging-how-its-done-and-what-tools-are-used/4 9 66 9 75 # 4 9 66 9 75) – Kevin

+0

केविन: धन्यवाद, लेकिन यह काफी नहीं है जो मैं ढूंढ रहा हूं। मैं डीबगर चलाने के तरीके को नहीं, वास्तविक डीबग प्रिंटआउट से निपटने का एक तरीका देख रहा हूं। – user616128

उत्तर

15

उपयोग

/* At the top of the file, before any includes */ 
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 

#include <linux/printk.h> 

/* in code... */ 
pr_devel("foobar happened\n"); 
एक आधार के रूप

(मानक अभ्यास)। इसके बाद आप __FILE__ या __LINE__ को pr_fmt परिभाषा में जोड़ सकते हैं तो आपको आवश्यकता हो सकती है।

+0

क्या मैं इस बिट को सही ढंग से समझता हूं? pr_ () <मेरे मॉड्यूल नाम> ":" क्या यह काम करेगा? क्या मुझे इंद्रधनुष() भी नहीं करना है? – user616128

+0

आपको मॉड्यूल नाम दोहराना नहीं है। pr_devel प्रिंट प्रिंट कहते हैं। इसे वर्तनी करने के लिए, 'define pr_fmt (fmt) KBUILD_MODNAME": "__FILE__": "__LINE__": "fmt', प्लस' pr_devel ("सामान और% p \ n", कुछ पॉइंटर) '। – user611775

+1

मैं एक ही वाक्य रचना का उपयोग कर रहा है, लेकिन मैं एक त्रुटि हो रही है: त्रुटि: '#define pr_fmt (FMT) KBUILD_MODNAME": "__FILE__": "__LINE__ की उम्मीद ')' सांख्यिक निरंतर मैं यह मेरी कोड में से पहले ":" fmt' (किसी भी # शामिल) से पहले और कोड 'pr_devel (" XXX \ n ");' – brokenfoot

2

यदि यह त्वरित डिबगिंग के लिए है, तो प्रिंटक() अच्छी तरह से काम करता है।

यदि यह अधिक उत्पादन स्थिति में डिबगिंग के लिए है, तो शायद pr_debug() का उपयोग करें, इसलिए रनटाइम पर संदेशों को सक्षम किया जा सकता है।

भले ही, ("% s: xxx", func) आमतौर पर पर्याप्त है। ये फ़ाइल नाम और रेखा संख्या जल्द ही परेशान हो जाएंगी। यही कारण है कि आपको कोई "मानक" समाधान नहीं मिला है - क्योंकि कोई भी नहीं है।