यदि आपने पहले बायबग नहीं देखा है, तो मेरा सुझाव है कि आप इसे देखें। रूबी 2.x के लिए यह एक अच्छा डीबगर है। इसके लेखकों के शब्दों में:
Byebug रूबी 2 के लिए उपयोग करने के लिए एक आसान, सुविधा संपन्न डिबगर है। यह निष्पादन नियंत्रण के लिए नए TracePoint API और कॉल स्टैक नेविगेशन के लिए नए डीबग इंस्पेक्टर API का उपयोग करता है, इसलिए यह आंतरिक कोर स्रोतों पर निर्भर नहीं करता है। इसे C एक्सटेंशन के रूप में विकसित किया गया है, इसलिए यह तेज़ है। और इसमें एक पूर्ण परीक्षण सूट है इसलिए यह विश्वसनीय है।
मूल सेटअप बहुत सरल है। बस मणि स्थापित करें। अगर आप byebug
. का इस्तेमाल करते हैं आपके कोड में कहीं भी, निष्पादन उस बिंदु पर रुक जाएगा और आपको डीबग कंसोल में छोड़ दिया जाएगा। आप इसे कभी भी pry का उपयोग करने के लिए सेट कर सकते हैं।
उदाहरण के लिए, मैं डीबगर को इस तरह से लागू कर सकता हूं:
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
इतना ही! डिबगिन शुरू करने का समय'।