2013-12-13 10 views
10

स्कैला स्टैक निशान कुख्यात जटिल हैं, विशेष रूप से अज्ञात कार्यों को बाइटकोड में अनुवाद करने के तरीके के कारण। यहाँ एक उदाहरण है:"बेहतर" स्कैला स्टैक निशान

java.lang.IllegalStateException 
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply$mcII$sp(IdentityVerifier.scala:19) 
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply(IdentityVerifier.scala:17) 
    at com.company.IdentityVerifier$$anonfun$go$2$$anonfun$apply$2.apply(IdentityVerifier.scala:17) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) 
    at scala.collection.immutable.List.foreach(List.scala:318) 
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) 
    at scala.collection.AbstractTraversable.map(Traversable.scala:105) 
    at com.company.IdentityVerifier$$anonfun$go$2.apply(IdentityVerifier.scala:17) 
    at com.company.IdentityVerifier$$anonfun$go$2.apply(IdentityVerifier.scala:16) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) 
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251) 
    at scala.collection.immutable.List.foreach(List.scala:318) 
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251) 
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105) 
    at com.company.IdentityVerifier$.go(IdentityVerifier.scala:16) 
    at com.company.UserMap.setLastUserId(UserMap.scala:12) 
    at com.company.UserConsumer.setCurrentUser(UserConsumer.java:69) 
    at com.company.UserConsumer.consume(UserConsumer.java:64) 
    at com.company.UserProducer.execute(UserProducer.java:19) 
    at com.company.UserCreator.execute(UserCreator.java:18) 
    at com.company.UserCreatorMain$1.run(UserCreatorMain.java:37) 
    at com.company.UserCreatorMain.main(UserCreatorMain.java:51) 

मैंने बाद पाया stackifier (यह उनकी उदाहरण है), लेकिन यह एक वेबपृष्ठ पर चिपकाने स्टैक ट्रेस रखने के लिए बोझिल है। क्या कंसोल पर "बेहतर" स्टैक निशान मुद्रित करने का कोई तरीका है?

+0

स्टैक ट्रेस जटिल कैसे है? यह आपको उस रेखा को बताता है जहां अपवाद हुआ था। – vptheron

+0

@vptheron एक स्टैक ट्रेस का बिंदु न केवल उस रेखा को जानना है जहां अपवाद हुआ था, लेकिन यह भी * यह कैसे मिला *। "कॉम्प्लेक्स" ज्यादातर व्यक्तिपरक है - मेरे लिए, '$$ anonfun $ $ 2 $$ anonfun $ $ 2 लागू होता है मुझे कोई उपयोगी जानकारी नहीं बताता है, न ही एक साधारण' flatMap' के लिए ट्रेस की 5 लाइनें करता है। हालांकि स्कैला के आंतरिक इलाकों में एक झलक देखना निश्चित रूप से दिलचस्प है, लेकिन ज्यादातर समय मैं समझता हूं कि * क्या गलत हुआ *। फास्ट। – goncalopp

+3

तकनीकी रूप से, इस स्कैला स्टैक ट्रेस के साथ समस्या यह है कि यह एक स्कैला स्टैक ट्रेस नहीं है, यह जावा स्टैक ट्रेस है। हालांकि, आपकी मदद नहीं करता है। –

उत्तर

4

IntelliJ विचार में मदद करता है, यहां तक ​​कि मामला आप कोड डिबगिंग नहीं कर रहे हैं में (और स्केला प्लगइन समुदाय संस्करण के साथ भी काम करना चाहिए):

http://www.jetbrains.com/idea/webhelp/analyzing-external-stacktraces.html

आप एक क्लिक करने योग्य स्टैक ट्रेस कि करने के लिए कूदता है मिल सही जगह।

मैंने स्कालाइड मंचों से पूछा कि क्या स्कालाइड भी ऐसा करता है। मिर्को डोट्टा निंजा-प्रतिक्रिया:

हां यह करता है, लेकिन ग्रहण में यह सबसे आसान विशेषता नहीं है। आप open the "Java StackTrace Console" की जरूरत

Emacs के बारे में पूछा नहीं किया है, किसी में चिप करें।

इसके अलावा, विचार करने के लिए "गुप्त" नाम (देखें C++ नाम mangling जाना) है कि है एक कीमत है जो आप के लिए भुगतान करने का प्रयास करें जोड़ा लचीलापन।

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