ดีบัก Rails ด้วย VSCode + debug gem กันดีกว่า

Published on
Tags
  • rails
  • ruby
  • debug

ปกติแล้ววิธีดีบักโค้ดที่ง่ายที่สุดก็คงหนีไม่พ้นการใส่ puts ทิ้งเอาไว้ตาม flow ของโปรแกรม เพื่อดูว่าแต่ละ step โปรแกรมทำงานถูกต้องตามที่เราคาดหวังไว้หรือไม่

ยกตัวอย่างเช่น ถ้าเราอยากตรวจสอบ params ที่เข้ามาว่ามี limit อยู่มั้ย และผลลัพท์จากการดึงข้อมูลได้ค่าเท่ากับ limit ที่กำหนดไว้หรือไม่ โค้ดก็คงจะออกมาประมาณนี้

# books_controller
def index
  puts params
  @books = Book.limit(params.try(:limit) || 10)
  puts @books.inspect
end

แน่นอนว่าสิ่งที่ยังคงหลงเหลือ หลังแก้ไขบักเรียบร้อยก็คือ เราต้องมาคอยตามลบ puts ที่เราวางไว้ออกจากโค้ดของเรา เอาจริงๆ ก็ไม่ยุ่งยากอะไรเท่าไหร่หรอก แต่เพื่อยกระดับความเป็นโปรเฟสชันแนลขึ้นอีกระดับ 555 ก็ลองมาใช้ debug กันดู

สำหรับ Rails สามารถเข้าไปศึกษาเพิ่มเติมได้ที่ Debugging with the debug gem

ในบทความนี้เราจะมา setup ให้สามารถใช้งาน debug gem บน debugger ที่มาพร้อมกับ VSCode กัน

รันทุกอย่างเสร็จสรรพบน VSCode

เพื่อความสะดวก โปรแกรมเมอร์บางคนก็ชอบที่จะทำงานอยู่บน VSCode เพียงอย่างเดียว โดยถ้าเราจะดีบัก Rails Application ด้วยก็จะต้องเพิ่มเติม config เข้าไปเล็กน้อย โดยให้เปิดโปรเจ็คที่ใช้งาน และเข้าไปยังเมนู Run -> Open Configurations จากนั้นใส่ config ตามด้านล่าง

```json
{
  "name": "Rails server",
  "type": "rdbg",
  "request": "launch",
  "cwd": "${workspaceFolder}",
  "command": "",
  "script": "${workspaceFolder}/bin/rails",
  "useBundler": true,
  "args": ["s"],
}
```

รันโปรแกรมพร้อมดีบัก โดยเข้าไปที่เมนู Run -> Start Debugging เพียงเท่านี้เราก็สามารถจะใส่ breakpoint, step over และอื่นๆ ได้ผ่าน Debug toolbar

Debugging

รันรีโมทดีบักผ่านคำสั่งนอก VSCode

สำหรับผม โดยส่วนตัวจะชอบรันคำสั่งต่างๆ ไว้บน iTerm ดังนั้นจะรันผ่านคำสั่งด้านล่างโดยตรง หรือนำคำสั่งไปใส่ใน Procfile ก็ได้

rdbg -O -n -c -- ./bin/rails s -b 0.0.0.0 -p 3000

จากนั้นก็จะใช้ VSCode ทำการเชื่อมต่อยัง remote debugger ที่เปิดเอาไว้ข้างต้น โดยเข้าไปที่ Run and Debug และเลือก config เป็น Attacch with rdbg จากนั้นก็กดปุ่ม Start ได้เลย

Attach rdbg

ทั้งนี้เราก็สามารถจะดีบักโปรแกรมได้สนุกมากยิ่งขึ้น