หากคุณไม่เคยเห็น byebug มาก่อน เราขอแนะนำให้คุณลองดู มันเป็นดีบักเกอร์ที่ยอดเยี่ยมสำหรับ Ruby 2.x ในคำพูดของผู้เขียน:
Byebug เป็นโปรแกรมดีบั๊กที่ใช้งานง่ายและมีคุณลักษณะหลากหลายสำหรับ Ruby 2 โดยจะใช้ TracePoint API ใหม่สำหรับการควบคุมการดำเนินการและ Debug Inspector API ใหม่สำหรับการนำทางสแต็กการโทร ดังนั้นจึงไม่ขึ้นอยู่กับแหล่งที่มาหลักภายใน ได้รับการพัฒนาเป็นส่วนขยาย C ดังนั้นจึงรวดเร็ว และมีชุดทดสอบเต็มรูปแบบจึงเชื่อถือได้
การตั้งค่าพื้นฐานค่อนข้างง่าย เพียงแค่ติดตั้งอัญมณี หากคุณใช้ byebug
เมธอดที่ใดก็ได้ในโค้ดของคุณ การดำเนินการจะหยุด ณ จุดนั้น และคุณจะถูกทิ้งลงในคอนโซลการดีบัก ตั้งค่าให้ใช้ pry ได้เลย
ตัวอย่างเช่น ฉันสามารถเรียกใช้ดีบักเกอร์ดังนี้:
require 'byebug'
def my_method
a = 1
byebug
end
my_method()
ถ้าฉันเรียกใช้ไฟล์นั้น ฉันจะถูกทิ้งลงในโปรแกรมแก้ไขข้อบกพร่อง
เมื่อดีบักเกอร์ทำงาน มันจะนำคุณเข้าสู่เชลล์แบบโต้ตอบ
ปัญหาของ Pow
ไม่เป็นไรถ้าคุณสามารถเรียกใช้แอปบนบรรทัดคำสั่งได้ แต่ถ้าคุณกำลังพัฒนาแอป Rails โดยใช้ pow เพื่อให้บริการในพื้นที่ล่ะ
Pow เช่นเดียวกับเซิร์ฟเวอร์แอปส่วนใหญ่ ทำงานในพื้นหลัง ดังนั้นแม้ว่าคุณจะหยุดการดำเนินการและเรียกใช้โปรแกรมดีบั๊ก คุณก็จะไม่สามารถโต้ตอบกับมันได้!
โชคดีที่ 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
หากคุณยังไม่ได้ติดตั้งอัญมณี ให้ติดตั้งได้เลย
# Gemfile
gem "byebug", group: "development"
ต่อไป เราต้องเพิ่มตัวเริ่มต้นให้กับแอพ rails ของเราที่เริ่มต้นเซิร์ฟเวอร์ byebug เมื่อใดก็ตามที่ pow เริ่มแอพ rails ของเรา ตัวเลือกจริงเพียงอย่างเดียวที่คุณต้องระบุคือหมายเลขพอร์ต โค้ดด้านล่างให้คุณกำหนดค่านั้นผ่านตัวแปรสภาพแวดล้อม
เมื่อคุณเพิ่มตัวเริ่มต้นนี้แล้ว คุณอาจต้องรีสตาร์ทแอปเพื่อให้แน่ใจว่าโหลดเสร็จแล้ว
# 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
แค่นั้นแหละ! ถึงเวลาเริ่มต้นการดีบัก