2012-01-19 8 views
17

मेरे पर्ल प्रोग्राम की तरह लग रहा है। मैं f/bar/test.pm में उप सब डिबग करना चाहता हूं। उस सब पर ब्रेकपॉइंट कैसे सेट करें?पर्ल प्रोग्राम में किसी विशेष फ़ाइल पर ब्रेकपॉइंट कैसे सेट करें?</p> <pre><code>foo/ foo/bar/ for/bar/test.pm foo.pm foo/bar.pm test.pl </code></pre> <p>और प्रयोग <code>perl test.pl</code> कार्यक्रम शुरू करने के लिए:

मैं यह कैसे कर सकता हूं?

धन्यवाद।

+2

मैं प्रदान की उत्तर से संतुष्ट नहीं हूँ। किसी विशेष फ़ाइल में किसी विशेष पंक्ति को तोड़ने के लिए आवश्यक 'बी [एलएन]' वाक्यविन्यास क्या है? – Adrian

उत्तर

22

एक पर्ल स्क्रिप्ट डीबग करने के लिए, -d डीबगर का आह्वान करने के लिए स्विच का उपयोग करें।

perl -d test.pl 

डिबगर के भीतर आप b <line no> का उपयोग वर्तमान फ़ाइल में एक ब्रेकपाइंट सेट करने के लिए कर सकते हैं। कभी कभी यह एक परेशानी है कि अभी तक लोड नहीं किया गया है या कि एक लंबे समय पहले लोड किया गया था एक फ़ाइल में एक ब्रेकपाइंट सेट करने के लिए है, तो आप भी किसी भी पर्ल कार्यक्रम में कहीं भी लाइन

$DB::single = 1; 

रख सकते हैं, और उस लाइन को निष्पादित करने के तुरंत बाद डीबगर टूट जाएगा। कोड में ब्रेकपॉइंट सेट करने के लिए यह एक अच्छा तरीका भी है (एकमात्र तरीका?) जो संकलन समय पर चलाया जाएगा।

+3

वर्थ नोटिंग, डीबगर में 'एफ' कमांड फ़ाइल नाम देखने के लिए स्विच करेगा, जैसा कि 'f /Path/To/Module.pm' में है; फ़ाइल पहले ही लोड होनी चाहिए। फिर आप केवल एक सबराउटिन के प्रवेश बिंदु पर, लेकिन उस फ़ाइल में किसी भी वैध रेखा पर ब्रेकपॉइंट सेट कर सकते हैं। – amp108

+2

'$ डीबी :: एकल = 1;' लाइन किसी के लिए काम कर रहे हैं? यह मुझे लगता है कि नियंत्रण – Bathakarai

+0

@ बाथकारई मेरे लिए काम नहीं करता है। –

9

बस b को तर्क के रूप में उप के पूरी तरह से योग्य नाम का उपयोग करें:

b foo::bar::test::subname 

उदाहरण:

$ perl -d -e'use CGI; CGI->new' 
... 
main::(-e:1): use CGI; CGI->new 
    DB<1> b CGI::new 
    DB<2> r 
CGI::new(.../CGI.pm:337): 
337:  my($class,@initializer) = @_; 
    DB<2> q 
+0

मान मुद्रित करने में मदद करती है यह ओपी के प्रश्न का वास्तविक उत्तर है। (मुझे पहले से ही यह पता था, और वास्तव में अन्य उत्तरों में दी गई जानकारी की तलाश में था।) –

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