2011-01-14 7 views
16

मैं कुछ शर्त हिट करते समय पर्ल प्रोग्राम लॉन्च डीबगर चाहता हूं। कुछ अन्य भाषा पुस्तकालय द्वारा समर्थित डीबग() कथन है, क्या पर्ल में कोई समान कथन है?क्या मैं स्रोत perl प्रोग्राम में ब्रेक पॉइंट डाल सकता हूं?

उत्तर

7

क्या आपने अपनी स्क्रिप्ट के शीर्ष पर शेबैंग लाइन पर-डी स्विच जोड़ने का प्रयास किया है? जैसे

#!/usr/bin/perl -d 
use strict; 
use warnings; 
$|=1;$\="\n"; 

print "Test"; 

कुछ यह वास्तव में निर्भर करता है यह वास्तव में कैसे शुरू किया जाता है, लेकिन कम से कम सरल मामलों में इस डिबगर शुरू कर देना चाहिए।

संपादित करें: इसके बाद आप एक निश्चित शर्त

> b [line] [condition] 

उपयोग करने के साथ एक विशेष लाइन पर एक ब्रेकपाइंट सेट और

> c 

मारा स्क्रिप्ट चलाने के साथ जारी रखने के लिए कर सकते हैं - डिबगर पर बंद हो जाएगा निर्दिष्ट स्थिति जब स्थिति पूरी हो जाती है

+0

यह बहुत अच्छा है। क्या विंडोज़ पर समान वाक्यविन्यास है? – Thomson

+1

मेरा मानना ​​है कि पर्ल स्विच का सम्मान करेगा भले ही वास्तविक पर्ल निष्पादन योग्य लॉन्चिंग शेबैंग में सूचीबद्ध नहीं है - यानी, उपरोक्त स्क्रिप्ट के रूप में शुरू होने पर भी, सी: \ Perl \ bin \ perl.exe script.pl , यह अभी भी डीबगर शुरू करना चाहिए – ivancho

3

ठीक है, ऐसा कुछ है जो आपको ब्रेकपॉइंट्स की तरह कुछ करने में सक्षम बनाता है, लेकिन कार्यक्षमता व्यापक है: Perl Debugger

+0

क्या यह काम तब हो सकता है जब मैं लॉन्च विधि (निष्पादन योग्य को कमांड लाइन) नहीं बदल सकता? – Thomson

+1

लॉन्च विधि आवश्यक है, आप विकल्प के बिना डीबगर का उपयोग नहीं कर सकते -d – Thariama

2

मूलतः -d स्विच आप पर्ल निष्पादन के साथ संवाद करने की अनुमति देता है, और पर्ल निष्पादन आप के साथ संवाद करने की अनुमति देता है। $DB::single -

More

+0

मेरा कोड का पेर्ल कोड बड़ा सिस्टम का हिस्सा है, और मैं इसे कैसे नियंत्रित कर सकता हूं इसे नियंत्रित नहीं कर सकता। ऐसा लगता है कि मैं ऐसा करने के लिए केवल स्रोत फ़ाइल में संशोधन कर सकता हूं। – Thomson

+3

@ थॉमसन टैन: उस स्थिति में, लॉगिंग बेहतर काम करेगी। [लॉग :: लॉग 4perl] पर एक नज़र डालें (http://search.cpan.org/perldoc?Log::Log4perl)। –

34

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

$x = 1234; 
$DB::single = 1; 
enter_problematic_sub_now(); 

आपका कोड तो, करने के लिए 1.

बेशक $ डीबी के साथ लाइन :: एक सेट में बंद है, तो आप वास्तव में सुनिश्चित नहीं कर सकते हैं कि आपके कोड तो आप डिबगर में चल रहा है जाएगा एक और समस्या पूरी तरह से। आप को भी अपना कोड perl -d के माध्यम से चलाने की आवश्यकता है।

+0

क्या आपका मतलब है कि मेरा प्रोग्राम डीबगर में नहीं चलता है, तो मैं $ DB :: एकल का उपयोग अपेक्षित के रूप में नहीं कर सकता? – Thomson

+3

@ थॉम्पसन: हाँ, यह सही है। यदि आप एक पर्ल प्रोग्राम को डीबग करना चाहते हैं, तो आपको इसे डीबगर के तहत चलाना होगा। मेरे सबसे अच्छे ज्ञान के लिए, इस तरह की चीज अन्य भाषाओं में स्रोत-आधारित रीयल-टाइम डिबगिंग के अधिकांश प्रकार के लिए सच है - इसके बावजूद कॉर्डम्प्स के पोस्टमॉर्टम। – tchrist

+0

@ क्रिसमस मुझे यकीन नहीं है कि यह पाइथन में आंतरिक रूप से कैसे काम करता है, लेकिन मैं 'पीडीबी आयात कर सकता हूं; pdb.set_trace() 'उस बिंदु पर तोड़ने के लिए कोड में कहीं भी और डीबगर दर्ज करें। मुझे किसी भी विशेष डीबग संशोधक के साथ स्क्रिप्ट चलाने की ज़रूरत नहीं है। –

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