2011-12-17 7 views
30

में तीसरे पक्ष के रत्नों को डीबग करने का सबसे अच्छा तरीका है क्योंकि बहुत सारे हो सकता है क्योंकि एक रूबी मणि के अंदर भूत विधि, मुझे नहीं लगता कि यह एक रूबी मणि के आंतरिक तंत्र का अध्ययन करना एक अच्छा विचार है अपने स्रोत कोड को स्थिर रूप से पढ़ना। क्या किसी तीसरे भाग वाले मणि की स्रोत फ़ाइल को डीबगिंग के लिए चलने वाली रूबी प्रक्रिया में संलग्न करने का कोई तरीका है ताकि मैं ब्रेक पॉइंट सेट कर सकूं और देख सकूं कि चीजें गतिशील रूप से कैसे काम करती हैं?
बीटीडब्लू, मैंने रूबीमाइन में तीसरे भाग के मणि की स्रोत फ़ाइल पर नेविगेट करने की कोशिश की है, 'आवश्यकता' कथन के संदर्भ मेनू "गो टू>> कार्यान्वयन" या तीसरे भाग के मणि के अन्य प्रतीक पर क्लिक करके (उदाहरण के लिए require 'watir'), सफलता के बिना। क्या एक गतिशील टाइपिंग भाषा के आईडीई के लिए यह सामान्य है जैसे रुबी एक प्रतीक नेविगेशन विफल करने के लिए?रूबी

उत्तर

37

मैं वहाँ यह करने के लिए एक बेहतर तरीका है पता करने के लिए प्यार होता है, लेकिन यह कैसे मैं आमतौर पर करते हैं:

  1. (अपने Gemfile को माणिक डिबग मणि जोड़ें या माणिक debug19 अगर आप कर रहे हैं रुबी पर 1.9.2)
  2. bundle show gemname कर मेम ढूंढें। मैं मैक पर हूं इसलिए मैं आमतौर पर इसे पीबीसीपी पर पाइप करता हूं ताकि यह मेरे क्लिपबोर्ड पर कॉपी हो जाए। bundle show rails | pbcopy
  3. अपने पसंदीदा संपादक में मणि निर्देशिका खोलें। mvim /path/to/gem/directory
  4. फ़ाइल और लाइन पर नेविगेट करें जहां आप ब्रेकपॉइंट रखना चाहते हैं * और प्रश्न में पंक्ति के ऊपर debugger डालें।
  5. पृष्ठ पुनः लोड करें, चलाने के परीक्षण, या जो भी आप और ruby debugger commands साथ लाइन द्वारा कदम लाइन पर अमल करने रत्न फ़ाइल
  6. निष्पादन डिबगर पर बंद हो जाता है, तो आप चर निरीक्षण कर सकते हैं (p variable_name) प्राप्त करने के लिए होगा।

* यह जानते हुए जहां ब्रेकप्वाइंट डाल करने के लिए कोड की कुछ समझ ले जा सकते हैं, लेकिन आप lib/gemname.rb

+3

धन्यवाद। यह बहुत अच्छा काम करता है। एफडब्ल्यूआईडब्ल्यू, मैंने इन निर्देशों का उपयोग [प्रिये] (https: // rubygems के साथ किया था।संगठन/रत्न/pry) रूबी-डीबग के बजाय और यह भी काम किया। –

+1

क्या यह एक ही मशीन पर अन्य अनुप्रयोगों को बाधित करेगा यदि वे एक ही जेम का उपयोग कर रहे हैं? – flyingL123

+0

@ flyingL123, मुझे लगता है कि यह दूसरों को बाधित करेगा, अगर वे आपके ऐप के रूप में डीबग मोड में चलाते हैं। – parzival

0

भाषाओं जो रनटाइम के दौरान कोड बदलने के लिए, रूबी की तरह में, सही रूप में 100% प्रतीक, तरीकों आदि के मूल अनुमान लगाना कठिन है

मैं तीसरे पक्ष के जवाहरात की जरूरत है कि स्रोत कोड विश्लेषण का एक बहुत से निपटने और मैंने पाया कि इस कार्य के लिए सबसे अच्छा उपकरण नेटबीस + यह रूबी और रेल प्लगइन है।

  • (अन्य विकल्प के विपरीत) निर्भर जवाहरात स्रोत कोड में अच्छा नेविगेशन
  • दृश्य breakpoints और डिबगिंग है कि वास्तव में ** (ट्रेस और सभी के साथ) काम

** यह कुछ खामियों है की अनुमति देता है उपज कोड कोड (जैसे प्रत्येक {}) में विधि कॉल के साथ, लेकिन मैंने उन

से निपटने के लिए सीखा है जो मैं आमतौर पर करता हूं ब्रेकपॉइंट सेट करता है और रनटाइम पर कोड का विश्लेषण करता है।

9

मैं के रूप में वर्तमान में स्वीकार जवाब में सुझाव दिया संपादन रत्न फ़ाइलों से बच जाएंगे में शुरू करना चाहिए। इसके बजाय, अपनी ऐप फ़ाइलों में से एक में debugger कमांड डालें और मणि में ब्रेकपॉइंट सेट करने के लिए break कमांड का उपयोग करें। मैं rvm उपयोग कर रहा हूँ एक gemset इसलिए यहाँ के साथ कैसे मैं यह कर रहा है:

break /Users/chris/.rvm/gems/[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>

+0

क्या स्वीकार्य उत्तर उसी मशीन पर अन्य अनुप्रयोगों के साथ हस्तक्षेप करेगा यदि वे एक ही जेम का उपयोग कर रहे हैं? यदि ऐसा है, ऐसा लगता है कि यह समाधान उस समस्या से बच जाएगा। – flyingL123

+2

हां। यह पूरी बात है। जब तक आप विकल्पों में से बाहर न हों, मैं जेम फ़ाइलों को हर कीमत पर संपादित करने से बचूंगा जबतक कि आप उन्हें फोर्क नहीं करना चाहते हैं –