আপনি যদি byebug আগে দেখেননি, আমি সুপারিশ করব আপনি একবার চেক আউট করুন। এটি রুবি 2.x-এ জন্য একটি চমৎকার ডিবাগার। এর লেখকদের কথায়:
Byebug হলো রুবি 2-এর জন্য একটি সিম্পল টু ইউজ, ফিচার রিচ ডিবাগার। এটি নতুন TracePoint API ব্যবহার করে এক্সিকিউশন কন্ট্রোলের জন্য এবং নতুন Debug Inspector API কল স্ট্যাক নেভিগেশনের জন্য, তাই এটি ইন্টারনাল কোর সোর্সের ওপর ডিপেন্ড করে না। এটি একটি C এক্সটেনশন হিসেবে ডেভেলপ করা হয়েছে, তাই এটি ফাস্ট। এবং এর একটি ফুল টেস্ট সুইট রয়েছে তাই এটি রিলায়েবল।
বেসিক সেটআপ খুব সিম্পল। শুধু জেমটি ইনস্টল করুন। আপনি আপনার কোডে যেকোনো জায়গায় byebug মেথড ব্যবহার করলে, এক্সিকিউশন সেটি পয়েন্টে রুকবে এবং আপনি একটি ডিবাগ কনসোলে ড্রপ হবেন। আপনি এটি pry ব্যবহার করার জন্যও সেটআপ করতে পারেন।
উদাহরণস্বরূপ, আমি ডিবাগার ইনভোক করতে পারি এমনভাবে:
require 'byebug' def my_method a = 1 byebug end my_method() যদি আমি সেই ফাইলটি রান করি, আমি ডিবাগারে ড্রপ হব।
ডিবাগার ট্রিগার হলে, এটি আপনাকে একটি ইন্টারঅ্যাক্টিভ শেলে ড্রপ করে।
Pow-এর সাথে সমস্যা
এটি তো ঠিক আছে যদি আপনি আপনার অ্যাপ কমান্ড লাইনে রান করতে পারেন। কিন্তু কী হবে যদি আপনি Pow ব্যবহার করে লোকালি একটি রেলস অ্যাপ ডেভেলপ করছেন?
Pow, অধিকাংশ অ্যাপ সার্ভারের মত, ব্যাকগ্রাউন্ডে রান করে। তাই এমনকি আপনি যদি এক্সিকিউশন রুকিয়ে ডিবাগার রান করাতে পারেন, আপনি তার সাথে ইন্টারঅ্যাক্ট করতে পারবেন না!
خوشবর্তমান, byebug রিমোট ডিবাগিংয়ের একটি মেকানিজম প্রদান করে।
আপনি যদি রিমোট ডিবাগিংয়ের সাথে পরিচিত নন, এটি একটি সিম্পল কনসেপ্ট। যখন byebug মেথড কল করা হয়, ইন্টারঅ্যাক্টিভ শেলে ডাম্প করার বদলে, ডিবাগার তার নিজস্ব একটি স্পেশাল সার্ভার ফায়ার আপ করে। আপনি তারপর এই ডিবাগ সার্ভারের সাথে একটি কমান্ড-লাইন ক্লায়েন্ট দিয়ে কানেক্ট করতে পারেন।
রিমোট ডিবাগিং কেমন দেখে?
প্রথমে, আমি byebug মেথড কল করি একটি কন্ট্রোলার একশনে
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 দ্বিতীয়, আমি সেই একশনে একটি রিকোয়েস্ট করি। কানেকশনটি হ্যাং করে যাওয়ার মত দেখায়।
একটি ওয়েব রিকোয়েস্ট যা ডিবাগার ট্রিগার করে সেটি লোড হয় না
শেষে, আমি আমার byebug ক্লায়েন্টে সুইচ করি, যা সঠিক পয়েন্টে একটি ডিবাগার কনসোলে শো করছে যা আমি স্পেসিফাই করেছিলাম।
byebug রিমোট ডিবাগার একশনে
byebug দিয়ে রিমোট ডিবাগিং সেটআপ করা
আপনার যদি ইতিমধ্যে জেমটি ইনস্টল না থাকে, তবে आगे বড়ুন এবং ইনস্টল করুন।
# Gemfile gem "byebug", group: "development" পরবর্তী, আমাদের রেলস অ্যাপে একটি ইনিশিয়ালাইজার যোগ করতে হবে যা whenever pow আমাদের রেলস অ্যাপ স্টার্ট করবে, byebug সার্ভারও স্টার্ট করবে। একমাত্র রিয়েল অপশন যা আপনাকে দিতে হবে সেটি হলো একটি পোর্ট নম্বর। নিচের কোড আপনাকে এনভায়রনমেন্ট ভেরিয়েবল দিয়ে সেটি কনফিগার করতে দেয়।
এই ইনিশিয়ালাইজার যোগ করার পর, আপনাকে সম্ভবত অ্যাপটি রিস্টার্ট করতে হবে নিশ্চিত হওয়ার জন্য যে এটি লোড হয়েছে।
# config/initializers/byebug.rb if Rails.env.development? Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i end শেষে, আপনাকে byebug ক্লায়েন্ট রান করতে হবে এবং সেটিকে বলতে হবে আমাদের সার্ভার কোথায় পাওয়া যাবে। ক্লায়েন্টটি তখন বসে থাকবে এবং একটি ডিবাগ ট্রিগার হওয়ার জন্য অপেক্ষা করবে।
আপনি যদি অন্য পোর্ট ব্যবহার করেন, তবে সেটি এখানে সাবস্টিটিউট করতে হবে।
bundle exec byebug -R localhost:1048 এটোই! ডিবাগিং শুরু করুন।