2012-05-01 12 views
8

के साथ लॉग इन करना मैं वैला प्रोग्रामिंग के लिए नया हूं और जावा और .NET के साथ अनुभव है, फिर भी मैं वाला के साथ लॉग इन करने के तरीके पर कुछ भी उपयोगी नहीं पाया है। क्या लॉग 4j या log4net जैसी कोई उपयोगी लॉगिंग सुविधा है या त्रुटि, चेतावनी, डीबग और ट्रेस जैसे कई लॉगिंग स्तरों में स्केलिंग के साथ वैला में लॉग इन करने का सुझाया गया तरीका क्या है? और रक्षात्मक प्रोग्रामिंग जैसे कि आकलन और अनुबंध के बारे में क्या? क्या रक्षात्मक प्रोग्रामिंग करने के लिए कोई सुझाव दिया गया है और स्टैक निशान और सटीक मूल कारण के साथ सबसे उपयोगी लॉग प्राप्त करने के लिए क्या है? एक सलाह के लिए धन्यवाद।वैला

उत्तर

22

लॉगिंग

वाला काफी कुछ मजबूत लॉगिंग सुविधाओं में बनाया गया है। आप थोड़ा और अधिक जटिल log() समारोह के लिए debug(), message(), warning(), error(), और critical() के रूप में शॉर्टकट का उपयोग कर सकते हैं। सभी आधार में शामिल हैं (स्वचालित रूप से शामिल) GLib namespace

यदि आप लॉग आउटपुट को रीडायरेक्ट करना चाहते हैं या अलग-अलग स्थानों पर विभिन्न प्रकार के संदेश भेजना चाहते हैं, तो आपको जो कुछ भी चाहिए वह GLib.Log namespace में है। दृश्यों के पीछे क्या हो रहा है इसके लिए आप glib docs on logging पढ़ना चाहेंगे।

रक्षात्मक प्रोग्रामिंग

वाला भी दावे और अनुबंधों के लिए समर्थन शामिल है। संक्षिप्त संस्करण: assert() और assert_not_reached() दावे के लिए, और requires() और ensures() अनुबंधों के लिए विधि हस्ताक्षर में। अधिक जानकारी के लिए Assertions and Contract Programming पर ट्यूटोरियल अनुभाग देखें।

त्रुटि हैंडलिंग

वाला की त्रुटि से निपटने के लिए थोड़ा अजीब है: समान दिखने वाले अपवाद है, लेकिन से भिन्न। Error Handling पर ट्यूटोरियल अनुभाग मूलभूत रूप से अच्छी तरह से कवर करता है, और फिर दृश्यों के पीछे क्या हो रहा है, इसकी एक और अधिक उन्नत समझ प्राप्त करने के लिए glib docs on errors पढ़ने में मददगार हो सकता है। जहां तक ​​मुझे पता है, वैला त्रुटियों से स्टैक ट्रेस प्राप्त करने का कोई तरीका नहीं है - बस एक प्रकार और एक संदेश।

उत्तम आचरण

सर्वोत्तम प्रथाओं के संदर्भ में, मुझे लगता है कि वाला जावा के लिए पर्याप्त समान है या सी # कि प्रथाओं आप पहले से ही जानते हैं कि एक सामान्य अर्थ में लागू किया जा सकता। मैं सुझाव देता हूं कि वाल्वा में विनिर्देशों को कैसे देखें, इस बारे में एक महसूस करने के लिए इन सुविधाओं के साथ खेलना। सौभाग्य!

+0

करता वाला अनुबंध के उल्लंघन के लिए समर्थन कस्टम संदेश? या यह एक गुप्त डिफ़ॉल्ट त्रुटि संदेश देने जा रहा है? मैं त्रुटियों को फेंकने के लिए एक अच्छा तरीका खोजने की कोशिश कर रहा हूं और वैला ट्यूटोरियल के डिफ़ॉल्ट "त्रुटि हैंडलिंग"/"संविदात्मक प्रोग्रामिंग" अनुभाग वास्तव में उपयोगी कुछ भी वर्णन नहीं कर रहे हैं। – weberc2

+0

ऐसा लगता है कि अनुबंधों को g_return_if_fail() पर कॉल में संकलित किया गया है, जो किसी भी कस्टम त्रुटि संदेश का समर्थन नहीं करता है। और आप सही हैं कि जेनरेट किए गए सी कोड से यह त्रुटि संदेश सबसे उपयोगी नहीं है। यदि आप अपने संदेशों के साथ कस्टम त्रुटियों को फेंकना चाहते हैं, तो वाला आपके लिए कोई वाक्य रचनात्मक चीनी नहीं पेश करता है - आपको इसे पुराने और पुराने तरीके से करना होगा। – chazomaticus

3

@chazomaticus महान उत्तर के अतिरिक्त के रूप में, आप कॉल स्टैक को अनदेखा करके वाला से स्टैकट्रैक प्राप्त कर सकते हैं।

यह सिर्फ वैला भाषा में बेक नहीं है।

मैं लिखा है के लिए हो इस तरह के एक पुस्तकालय: ivy

ivy

1

मैं 2 बातें जवाब @chazomaticus में जोड़ने के लिए करना चाहते हैं:

  1. मैं क्यों देखने के लिए सक्षम नहीं कर रहा हूँ कोई डीबग/लॉग आउटपुट?

    आप वातावरण चर G_MESSAGES_DEBUGall करने के लिए सेट करने के लिए है। दस्तावेज द्वारा भी उल्लेख किया गया है, लेकिन आगे समझाया नहीं गया है। जैसे debug के लिए:

    public static int main (string[] args) { 
        // Use "G_MESSAGES_DEBUG=all ./test" to print debug messages! 
    
        // Output: ``** (process:<PID>): DEBUG: <FILENAME>:<LINE>: my 10. debug message`` 
        debug ("my %d. %s", 10, "debug message"); 
        return 0; 
    } 
    
    valac --pkg glib-2.0 GLib.debug.vala 
    
    G_MESSAGES_DEBUG=all ./GLib.debug 
    
    ./GLib.debug 
    

    आप उत्पादन further restrict करना चाहते हैं, तो आप error, warning, critical, message, info, debug और help बजाय all उपयोग कर सकते हैं।

  2. कहाँ मैं हर प्रवेश समारोह के लिए दस्तावेज़ मिल सकती है?

अतिरिक्त पठन: