यदि आपने पहले बाईबग नहीं देखा है, तो मैं सुझाव देता हूँ कि आप इसे देखें। यह रूबी 2.x के लिए एक बेहतरीन डीबगर है। इसके लेखकों के शब्दों में:
बाईबग रूबी 2 के लिए उपयोग में सरल, सुविधा संपन्न डीबगर है। यह निष्पादन नियंत्रण के लिए नए TracePoint API और कॉल स्टैक नेविगेशन के लिए नए डिबग इंस्पेक्टर API का उपयोग करता है, इसलिए यह आंतरिक कोर स्रोतों पर निर्भर नहीं करता। इसे C एक्सटेंशन के रूप में विकसित किया गया है, इसलिए यह तेज़ है। और इसका एक पूर्ण टेस्ट सूट है इसलिए यह विश्वसनीय है।
बुनियादी सेटअप बहुत सरल है। बस जेम इंस्टॉल करें। यदि आप अपने कोड में कहीं भी byebug मेथड का उपयोग करते हैं, तो निष्पादन उस बिंदु पर रुक जाएगा और आपको एक डीबग कंसोल में डाल दिया जाएगा। आप इसे प्राई का उपयोग करने के लिए भी सेट कर सकते हैं।
उदाहरण के लिए, मैं डीबगर को इस तरह लागू कर सकता हूँ:
require 'byebug' def my_method a = 1 byebug end my_method()
यदि मैं उस फाइल को चलाता हूँ, तो मुझे डीबगर में डाल दिया जाता है।
जब डीबगर ट्रिगर होता है, तो यह आपको एक इंटरैक्टिव शेल में डाल देता है।
पाउ के साथ समस्या
यह ठीक है अगर आप अपना ऐप कमांड लाइन पर चला सकते हैं। लेकिन क्या होगा अगर आप पाउ का उपयोग करके स्थानीय रूप से सेवा देने वाला एक रेल्स ऐप विकसित कर रहे हैं?
पाउ, अधिकांश ऐप सर्वर की तरह, बैकग्राउंड में चलता है। इसलिए भले ही आप निष्पादन को रोकने और डीबगर चलाने में कामयाब हो जाएं, आप इसके साथ इंटरैक्ट नहीं कर पाएंगे!
सौभाग्य से, बाईबग रिमोट डीबगिंग के लिए एक तंत्र प्रदान करता है।
यदि आप रिमोट डीबगिंग से परिचित नहीं हैं, तो यह एक सरल अवधारणा है। जब बाईबग मेथड को कॉल किया जाता है, तो आपको इंटरैक्टिव शेल में डालने के बजाय, डीबगर अपना स्वयं का विशेष सर्वर शुरू करता है। आप फिर कमांड-लाइन क्लाइंट का उपयोग करके इस डीबग सर्वर से कनेक्ट कर सकते हैं।
रिमोट डीबगिंग कैसी दिखती है?
सबसे पहले, मैं एक कंट्रोलर एक्शन में बाईबग मेथड को कॉल करता हूँ
class PagesController < ApplicationController def index if user_has_never_signed_in? && request.subdomain == "www" @hero_bg = ab_test("hero_bg", "control", "variable") else @hero_bg = "control" end byebug end end
दूसरा, मैं उस एक्शन पर एक अनुरोध करता हूँ। कनेक्शन लटका हुआ प्रतीत होता है।
एक वेब अनुरोध जो डीबगर को ट्रिगर करता है लोड नहीं होता
अंत में, मैं अपने बाईबग क्लाइंट पर स्विच करता हूँ, जो ठीक उसी बिंदु पर एक डीबगर कंसोल दिखा रहा है जिसे मैंने निर्दिष्ट किया था।
बाईबग रिमोट डीबगर एक्शन में
बाईबग के साथ रिमोट डीबगिंग सेट अप करना
यदि आपके पास पहले से जेम इंस्टॉल नहीं है, तो आगे बढ़ें और इसे इंस्टॉल करें।
# Gemfile gem "byebug", group: "development"
इसके बाद, हमें अपने रेल्स ऐप में एक इनिशियलाइज़र जोड़ना होगा जो जब भी पाउ हमारे रेल्स ऐप को शुरू करे तो बाईबग सर्वर शुरू कर दे। आपको वास्तव में केवल एक पोर्ट नंबर प्रदान करने की आवश्यकता है। नीचे दिया गया कोड आपको पर्यावरण चर के माध्यम से इसे कॉन्फिगर करने देता है।
एक बार जब आप यह इनिशियलाइज़र जोड़ लेते हैं, तो आपको शायद ऐप को रीस्टार्ट करना होगा ताकि यह सुनिश्चित हो सके कि यह लोड हो गया है।
# config/initializers/byebug.rb if Rails.env.development? Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i end
अंत में, आपको बाईबग क्लाइंट चलाना होगा और उसे बताना होगा कि हमारा सर्वर कहां मिलेगा। क्लाइंट तब बैठकर डीबग ट्रिगर होने की प्रतीक्षा करेगा।
यदि आपने एक अलग पोर्ट का उपयोग किया है, तो आपको उसे यहां प्रतिस्थापित करना होगा।
bundle exec byebug -R localhost:1048
बस! डीबगिंग शुरू करने का समय।