2012-01-11 7 views
6

यह एक उपन्यास विचार होता है (चूंकि मैं नहीं मिला है किसी भी समाधान या किसी को भी इसे लागू होने के बाद) मुझे लगता है में डिबग लाइनों को हटाने के लिए भूल नहीं करने के लिए कैसे ...कोड

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

उदाहरण के लिए:

अक्सर (मेरी रूबी परियोजनाओं में) मैं, कभी कभी

puts params.inspect 

या

raise params.inspect 

भी तरह उत्पादन चर के कोड की लाइनें छोड़ देंगे मैं विभिन्न विधियों का उपयोग करूंगा ताकि मैं आसानी से ऐसे मामलों जैसे प्रभावों को देख सकूं जैसे देरी_बॉज का उपयोग करना जहां मैं बिना किसी विधि के विधि को कॉल करूंगा विकास के दौरान रखना।

समस्या कभी-कभी मैं उन विधियों को वापस बदलना भूल जाता हूं या पैरा को बढ़ाने के लिए कॉल को मिटाना भूल जाता हूं। निरीक्षण और मैं अनजाने में उस कोड को दबा दूंगा।

तो मैं शायद सोचा था कि सबसे सरल समाधान के एक विकास केवल/डिबग पंक्ति के रूप में है कि लाइन पर चिह्नित करने में इस तरह के

raise params.inspect #debug 

संक्षेप में के रूप में किसी भी तरह के डिबगिंग लाइन के लिए एक टिप्पणी जोड़ने के लिए किया गया था। फिर एक शेल स्क्रिप्ट में जो गिट प्रतिबद्धता जैसे किसी अन्य कमांड से पहले चलता है, वह उस #debug टिप्पणी के लिए सभी नवीनतम संशोधित फ़ाइलों के माध्यम से खोजने के लिए अजीब या grep का उपयोग कर सकता है और निष्पादन रोक सकता है और आपको सतर्क कर सकता है। हालांकि मुझे शैल स्क्रिप्टिंग के बारे में बहुत कुछ पता नहीं है इसलिए मैंने सोचा कि मैं मदद मांगूंगा :)

+0

आपको स्क्रिप्ट स्क्रिप्टिंग भाषा में स्क्रिप्ट लिखने की आवश्यकता नहीं है, यदि आप चाहें तो रूबी का उपयोग करके इसे लिख सकते हैं। – jcollado

+0

जावा में, यह जोड़ने के लिए एक अच्छा अभ्यास है कि (log.isDebugEnabled) {डीबग लॉगिंग ..} मुझे यकीन नहीं है कि ऐसा कुछ खोल में मौजूद है या नहीं। –

+0

@ क्रिकांत्रेडिक्स - लॉगबैक ढांचा स्वयं को उस चेक में बनाता है ताकि आप 'if' कथन के साथ कोड को और अधिक खराब करने के बजाय' log.debug() 'का उपयोग कर सकें। – cdeszaq

उत्तर

7

हालांकि मैं पूरी तरह से सीडीएसएक्सए सलाह का अनुशंसा करता हूं और इस तरह की चीज करने से हतोत्साहित करता हूं, यह एक गिट हुक लिखना बहुत आसान है जो आपको किसी विशेष स्ट्रिंग के साथ किसी भी लाइन को करने से रोक देगा। सादगी के लिए, मैं गिट रेव-पार्स नहीं दिखा रहा हूं - हेड को सत्यापित करें कि आपको इस हुक काम को प्रारंभिक प्रतिबद्धता पर बनाने के लिए उपयोग करना चाहिए, लेकिन यदि आप बस निम्नलिखित में शामिल हैं। Git/hooks/pre-commit (और बनाना यह निष्पादन योग्य), तो आपको नहीं कोड के किसी भी लाइनों है कि स्ट्रिंग '#debug' को शामिल करने में सक्षम हो जाएगा:

 
#!/bin/sh 

if git diff-index -p -M --cached HEAD | grep '#debug' > /dev/null; then 
    echo 'debug lines found in commit. Aborting' >&2 
    exit 1 
fi 
+0

दोस्त यह शानदार लग रहा है। धन्यवाद। मैं इसे आशुलिपित करने की कोशिश करूंगा। – DiegoSalazar

+0

आश्चर्यजनक धन्यवाद काम करता है! – DiegoSalazar

2

जैसा कि मैंने अपनी टिप्पणी में कहा था, आप किसी भी प्रोग्रामिंग भाषा का उपयोग कर सकते हैं जिसके साथ आप सहज महसूस करते हैं।

वैसे भी, अन्य प्रतिबद्ध हुक की तलाश में, मुझे लगता है कि this one शुरू करने के लिए एक अच्छा हो सकता है। यह मूल रूप से आपकी फ़ाइलों में कुछ शब्दों की तलाश करता है और फ़ाइल के शीर्ष में checks सरणी को बदलकर अनुकूलित किया जा सकता है।

+0

यह समस्या हल करता है, सिर्फ पर्सेल का जवाब दिया क्योंकि यह समान और जल्द था: पी धन्यवाद! – DiegoSalazar

3

बल्कि अतिरिक्त कार्य (कोड की लाइनों को हटाने) करने के लिए याद करने के लिए केवल जब चीजें फिर से तोड़ अधिक काम बाद में क्या करना है के लिए होने से (फिर से कहा कि कोड), क्यों नहीं समझदार डिबगिंग बयानों से में डाल शुरुआत?

अधिकांश भाषाओं में काफी अभिव्यक्तिपूर्ण और अक्सर सस्ते लॉगिंग लाइब्रेरी होती हैं जो आपको विभिन्न स्थानों (त्रुटि, जानकारी, डीबग, ट्रेस) के विभिन्न स्तरों (फ़ाइल, डेटाबेस) को लिखने की अनुमति देती हैं। इन पुस्तकालयों में से कई प्रोग्राम पर रनटाइम या यहां तक ​​कि पर चलाते समय कोड के विशिष्ट खंड के लिए लॉगिंग स्तर को समायोजित करने देंगे।

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

+0

उत्तर के लिए धन्यवाद लेकिन यह देरी_job का उपयोग करने की समस्या को हल नहीं करता है या नहीं कि आप किस पर्यावरण में हैं। मैं इसके लॉगिंग हिस्से पर आपके साथ सहमत हूं। मैं उनके उचित लॉगजर विधियों में ऐसे वक्तव्य डालूंगा। – DiegoSalazar

0

@cdeszaq लॉगिंग भाग के बारे में सही है।

व्यवहार जो पर्यावरण के आधार पर भिन्न होता है, इसे प्राप्त करने का सामान्य तरीका व्यवहार को कॉन्फ़िगर करने योग्य बनाना है। delayed_job को यह तय करने के लिए कॉन्फ़िगरेशन फ़ाइल से एक मान पढ़ना चाहिए कि कितना देर देरी हो। उत्पादन वातावरण के लिए कॉन्फ़िगरेशन में एक मान होगा और विकास वातावरण के लिए कॉन्फ़िगरेशन का एक अलग मूल्य होगा।