मैं पर्ल में स्टैक निशान कैसे प्राप्त करूं?पर्ल में स्टैक निशान प्राप्त करना?
उत्तर
कई उपयोगी, कोर हैं ई और सीपीएएन आधारित उपकरण एक स्टैक ट्रेस उत्पन्न करने के लिए (जैसे अन्य उत्तरों बताते हैं।) हालांकि, अगर आप अपना रोल करना चाहते हैं, तो caller
बिल्टिन देखें। आप स्टैक को नीचे चलने के लिए इसका उपयोग कर सकते हैं और देख सकते हैं कि क्या हो रहा है।
Carp::confess
(use Carp;
से) आपको त्रुटि के हिस्से के रूप में एक पूर्ण स्टैक ट्रेस देगा। यदि आपको बस कुछ विफल होने के हिस्से के रूप में इसकी आवश्यकता है, तो confess
आपको वास्तव में आवश्यकता है।
टिप्पणियों के अनुसार, यहां विभिन्न Carp
कार्यों का उत्पादन है:
use strict;
use warnings;
use Carp qw/longmess cluck confess/;
sub foo {
&bar;
}
sub bar {
&baz;
}
sub baz {
shift->();
}
my %tests = (
'longmess' => sub { print longmess 'longmess' },
'cluck' => sub { cluck 'using cluck' },
'confess' => sub { confess 'using confess' },
);
while (my ($name, $sub) = each %tests) {
print "$name - before eval:\n";
eval {
foo($sub);
};
print "$name - before if:\n";
if ([email protected]) {
print "caught: [email protected]";
}
print "$name - done\n\n";
}
इस स्क्रिप्ट चल रहा है, आप पाते हैं:
longmess - before eval: longmess at - line 14 main::baz called at - line 10 main::bar called at - line 6 main::foo('CODE(0x183a4d0)') called at - line 26 eval {...} called at - line 25 longmess - before if: longmess - done confess - before eval: confess - before if: caught: using confess at - line 20 main::__ANON__() called at - line 14 main::baz called at - line 10 main::bar called at - line 6 main::foo('CODE(0x183a3e0)') called at - line 26 eval {...} called at - line 25 confess - done cluck - before eval: using cluck at - line 19 main::__ANON__() called at - line 14 main::baz called at - line 10 main::bar called at - line 6 main::foo('CODE(0x183a434)') called at - line 26 eval {...} called at - line 25 cluck - before if: cluck - done
इस स्क्रिप्ट चल रहा है लेकिन STDOUT पुनः निर्देशित (इस प्रकार दिखा क्या STDERR पर मुद्रित हो जाता है) , आपको मिलता है:
using cluck at - line 19 main::__ANON__() called at - line 14 main::baz called at - line 10 main::bar called at - line 6 main::foo('CODE(0x183a434)') called at - line 26 eval {...} called at - line 25
स्टैक ट्रेस और STDERR करने के लिए त्रुटि भेजता है कि; यदि आपको इसे कैप्चर करने की आवश्यकता है, तो सीधे अंतर्निहित कार्प :: लांगमेस() का उपयोग करें। और कार्प :: क्लक कबूल की तरह है लेकिन बाद में मर जाता है। – ysth
मुझे लगता है कि पीछे की ओर है - 'क्लक' एक स्टैक ट्रेस के साथ एक चेतावनी है और 'कबूल' एक मर है। – mob
गलती, हाँ, वह पिछला – ysth
डीबगिंग आवश्यकताओं के लिए, मुझे Carp::Always पसंद है।
perl -MCarp::Always my_script.pl
मुझे लगता है कि -एमएमआरपी = वर्बोज़ करने की आवश्यकता है – brianegge
caller
का उपयोग करके आसान तरीका। यह कोड किसी भी अतिरिक्त मॉड्यूल का उपयोग नहीं करता है। बस जहां आवश्यक हो उसे शामिल करें।
my $i = 1;
print "Stack Trace:\n";
while ((my @call_details = (caller($i++)))){
print $call_details[1].":".$call_details[2]." in function ".$call_details[3]."\n";
}
- 1. जावा स्टैक निशान
- 2. हाइलाइटिंग पायथन स्टैक निशान
- 3. पायथन: लाइब्रेरी कोड में स्टैक निशान को समाप्त करना?
- 4. एंड्रॉइड स्टैक निशान में टैग कैसे जोड़ें?
- 5. Django: रनटाइम चेतावनियों के लिए स्टैक निशान कैसे प्राप्त करें
- 6. मोनो टच स्टैक निशान विस्तृत नहीं हैं
- 7. जावा स्टैक निशान से शोर की सफाई
- 8. यूनिट टेस्ट w/पूर्ण स्टैक निशान
- 9. ग्रहण का उपयोग कर ग्रोवी में स्वच्छ स्टैक निशान?
- 10. क्या मैं अपने सी # ऐप में सभी धागे के स्टैक निशान प्राप्त कर सकता हूं?
- 11. ग्रहण लॉगकट विंडो अपवाद स्टैक निशान काटता है
- 12. जीडब्ल्यूटी: क्लाइंट-साइड त्रुटियों/सर्वर पर स्टैक निशान भेजें?
- 13. किसी भी कारण से हमेशा स्टैक निशान लॉग नहीं करना है?
- 14. गीवेंट में, मैं सभी चल रहे ग्रीनलेट्स के स्टैक निशान कैसे डंप कर सकता हूं?
- 15. मैं ओकैमल में एक स्टैक ट्रेस कैसे प्राप्त करूं?
- 16. सी ++ टेम्पलेट (ज्यादातर बूस्ट) के लिए जीडीबी में क्लीनर, प्रीटीयर स्टैक निशान - भारी कोड
- 17. आंतरिक स्ट्रिंग स्टैक ट्रेस प्राप्त करना आंतरिक अपवाद
- 18. मैं पर्ल में कॉल स्टैक सूची कैसे प्राप्त कर सकता हूं?
- 19. मैं ब्राउज़र में (जेटी का उपयोग करके) स्टैक निशान कैसे छिपा सकता हूं?
- 20. ओसीएमएल में स्टैक निशान मुद्रित करने के लिए कब -g का उपयोग किया जाना चाहिए?
- 21. सी ++ (एमएसवीसी) में स्टैक ट्रेस प्रिंट करना?
- 22. स्टैक निशान मेरे कोड (एंड्रॉइड पर एनडीके का उपयोग करने से पहले)
- 23. जावा: InputStream निशान सीमा
- 24. ghci निष्पादन स्टैक प्रदर्शित करना
- 25. मैं पर्ल एप्लिकेशन में सभी 'मरने के साथ' कबूल 'को कैसे बदल सकता हूं?
- 26. सामान्य निष्पादन में .NET में स्टैक ट्रेस कैसे प्राप्त करें?
- 27. रिलीज में कॉल स्टैक प्राप्त करने में समस्याएं
- 28. स्टैक
- 29. धागे के स्टैक ट्रेस कैसे प्राप्त करें
- 30. स्टैक ट्रेस (रिलीज) में गलत रेखा संख्या
उह था, या 'डेवेल :: स्टैकट्रेस' का उपयोग करें। – jrockway
यह एक अच्छा, अन्य विकल्प है। लेकिन इसके लिए एक बाहरी मॉड्यूल की आवश्यकता है, जो आकर्षक हो सकता है या नहीं। डाउनवॉटिंग के बजाय, इसे सिर्फ उत्तर के रूप में क्यों न पोस्ट करें? –