2010-02-25 12 views
6

मैं जावा स्विंग एप्लिकेशन में ग्रोवी का उपयोग कर रहा हूं, जब तक कि मैं उन्हें पसंद नहीं करता (जो हो रहा है, आंशिक रूप से) मुझे गतिशील भाषाओं को मजबूर करने के लिए मेरी योजना के हिस्से के रूप में।ग्रहण का उपयोग कर ग्रोवी में स्वच्छ स्टैक निशान?

मेरे स्टैक ट्रेस (, फिल्टर स्टैक ट्रेस मूल रूप से) की तरह

org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor 

वहाँ एक रास्ता ग्रहण कि codehaus सामान के सभी दूर करने के लिए प्राप्त करने के लिए है ग्रूवी सामान से भर रहे हैं?

संपादित करें: मैं grep (अच्छी तरह से, not yet) के साथ कमांड लाइन से ऐसा कर सकते हैं तो यह इतना बुरा नहीं है, लेकिन ग्रहण के अंदर भी बहुत अच्छा होगा।

+0

यदि आप स्टैक निशान को लॉगर (जैसे java.util.Logger) के माध्यम से डंप कर रहे हैं तो आप उन्हें प्रारूपित कर सकते हैं। हालांकि, स्टैक निशान से सामान को प्रोग्रामिंग रूप से उन चीजों में से एक जैसा लगता है जो आपके कोड को पागल रखने वाले व्यक्ति को ड्राइव कर सकता है। यदि आप डिबगिंग कर रहे हैं, तो मैं grep के साथ रहूंगा - फिर उत्पादन में आपका कोड हर समय सही स्टैक निशान उत्पन्न करेगा। – Quotidian

+0

@Quotidian, आपका अवलोकन आंशिक रूप से सही है। ये "विकास-समय" स्टैक निशान हैं जो ऐप के स्टार्टअप को रोक देंगे। दूसरी तरफ, मुझे लगता है कि ग्रोवी में कोई भी विकास उस सामान को हटाना चाहेगा, जब तक कि वे कोडहॉस कोड पर काम नहीं कर रहे हों। बस "हैलो वर्ल्ड" कहने के लिए कोडहॉस कोड का एक टन लगाया गया है। किसी उपयोगकर्ता/प्रोग्रामर परिप्रेक्ष्य से कोई समझ नहीं आता है। –

उत्तर

9

ग्रोवी में एक उपयोगिता है जो वही करता है जो आप चाहते हैं: StackTraceUtils। STU, अपने स्टैकट्रेस से सभी callsite जानकारी साफ आपकी वाकई में रुचि रखते हैं छोड़ने जाएगा

संपादित करें:। जावा में आप टिप्पणी के अनुसार एक java.lang.RuntimeException में अपवाद encasulate करना होगा। उपयोग के

उदाहरण:

try { 
    1/0; 
} catch (Throwable t) { 
    throw new RuntimeException(org.codehaus.groovy.runtime.StackTraceUtils.sanitize(t)); //Modifies the Throwable and rethrows 
} 

StackTraceUtils ग्रूवी के नवीनतम संस्करण में उपलब्ध है और मूल रूप से Grails से आता है। मुझे यकीन नहीं है कि आप अपनी सभी परियोजनाओं के लिए इसे कैसे लागू करेंगे, लेकिन मुझे लगता है कि ग्रिफॉन और ग्रेल्स दोनों ऐसा करते हैं इसलिए उन परियोजनाओं में कुछ संकेत होना चाहिए।

+0

अच्छी चीजें, धन्यवाद! –

+0

मैं इसे अब के लिए सबसे अच्छा जवाब के रूप में चिह्नित करूंगा, लेकिन अगर कोई ऐसे व्यक्ति के साथ आता है जो मुझे बता सकता है कि ग्रहण करने के लिए ग्रहण कैसे प्राप्त करें ... लेकिन मेरे लिए यह काम किया। –

+0

आपका स्वागत है। आप java.lang.Thread.UncaughtExceptionHandler का उपयोग करके सभी बेकार स्टैकट्रैस के लिए स्वचालित रूप से ऐसा करने में सक्षम होना चाहिए जो आपको अपरिपक्व अपवादों के लिए अपवादकर्ता पंजीकृत करने की अनुमति देता है लेकिन मैं इसे काम करने में सक्षम नहीं हूं। इसके बारे में यहां और पढ़ें: http://dabblescribble.blogspot.com/2009/11/starting-out-in-griffon-3-logging.html – xlson

2

मेरे पास "ग्रोवी एप्लिकेशन के रूप में चलाएं" के लिए कोई जवाब नहीं है, लेकिन यदि आप ग्रॉवीस्टेस्टेस को एक्लिप्स में जुनीट परीक्षण के रूप में चलाते हैं, तो स्टैक ट्रेस व्यू के ऊपर एक "फ़िल्टर स्टैक निशान" बटन होता है।

+1

+1 हम करीब आ रहे हैं! –

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