Elixir:
การใช้งานดีบักเกอร์
วิธีการ:
Elixir มาพร้อมกับตัวดีบักแบบกราฟิกอินเทอร์เฟสที่ใช้งานได้ภายในและเรียกว่า :debugger
เพื่อใช้งาน, คุณจำเป็นต้องเริ่มต้นและเชื่อมต่อไปยังกระบวนการที่กำลังทำงาน
ขั้นแรก, ตรวจสอบว่าคุณได้เริ่ม :debugger
ภายในเซสชั่น iex
:
iex> :debugger.start()
{:ok, #PID<0.108.0>}
ตอนนี้, ตีความโมดูลโค้ดที่คุณต้องการดีบัก:
iex> :int.ni(MyApp.MyModule)
{:module, MyApp.MyModule}
คุณสามารถตั้งจุดหยุด (breakpoint):
iex> :int.break(MyApp.MyModule, line_number)
:ok
แล้ว, เรียกใช้ฟังก์ชันของคุณเพื่อให้ตรงกับจุดหยุดและเดินผ่านโค้ดของคุณ:
iex> MyApp.MyModule.my_function(arg1, arg2)
# Debugger จะหยุดการเดินทางที่บรรทัดที่มีจุดหยุด
ดูลึกลงไป
ก่อนที่ Elixir จะมี :debugger
, Erlang ได้มอบตัวดีบักที่ Elixir ใช้; มันแข็งแกร่งและเก่งอย่างยิ่งในการจัดการกับกระบวนการแบบขนาน(concurrent processes), ซึ่งเป็นจุดเด่นของ Erlang VM (BEAM) ไม่เหมือนกับตัวดีบักอื่นๆ, :debugger
ไม่อนุญาตให้เปลี่ยนแปลงตัวแปรได้ทันที, เนื่องจากธรรมชาติของข้อมูลใน Elixir ที่ไม่สามารถเปลี่ยนแปลงได้ ส่วนทางเลือกอื่นๆ, คุณมี IEx.pry
ที่ให้คุณหยุดการทำงานและกระโดดเข้าไปใน REPL ที่จุดใดก็ตามในโค้ดของคุณ, ซึ่งอาจเป็นประโยชน์มาก
ในขณะที่ :debugger
เหมาะสำหรับอินเทอร์เฟสแบบกราฟิก, บางคนอาจชอบใช้เครื่องมือ :observer
ซึ่งให้บริการตรวจสอบกระบวนการและเมตริกของระบบ, แม้ว่าจะไม่ได้มุ่งเน้นไปที่การเดินผ่านโค้ดโดยตรงก็ตาม ชุมชนของ Elixir ยังมีส่วนร่วมในการสร้างเครื่องมือเช่น visualixir
และ rexbug
, ขยายระบบนิเวศของเครื่องมือดีบักไปเหนือกว่าค่าเริ่มต้น
ดูเพิ่มเติม
- คู่มือเริ่มต้นใช้งาน Elixir อย่างเป็นทางการเกี่ยวกับการดีบัก: https://elixir-lang.org/getting-started/debugging.html
- เอกสารของ Erlang
:debugger
: http://erlang.org/doc/apps/debugger/debugger_chapter.html - การอภิปรายในฟอรัม Elixir เกี่ยวกับเทคนิคการดีบัก: https://elixirforum.com/c/elixir-questions/elixir-questions-questions-help/15