การดีบักโปรเจกต์ PHP ด้วย XDebug
XDebug คือเครื่องมือทรงพลังสำหรับการดีบัก วิเคราะห์ประสิทธิภาพ และตรวจสอบโค้ดโฟเวอเรจในงานพัฒนา PHP การใช้งาน XDebug ที่ติดตั้งมากับ ServBay ในสภาพแวดล้อมพัฒนาโลคัลจะช่วยเพิ่มประสิทธิภาพและคุณภาพให้กับโปรเจกต์ PHP ของคุณได้อย่างมีนัยสำคัญ ด้วย XDebug นักพัฒนาสามารถตั้งจุดหยุด (Breakpoint) ตรวจสอบค่าตัวแปร ติดตาม Call Stack ของฟังก์ชัน และวิเคราะห์ปัญหาคอขวดของระบบ ช่วยให้คุณแก้ไขบั๊กและปรับปรุงโค้ดได้ตรงจุดและรวดเร็ว
XDebug คืออะไร?
XDebug คือส่วนขยายที่ออกแบบมาเพื่อ PHP ที่มอบความสามารถในการดีบักตรวจสอบ และวิเคราะห์โค้ดอย่างครบถ้วน โดยรองรับการดีบักระยะไกล (ผ่านโปรโตคอล DBGp) การตั้งจุดหยุด ดีบักตามขั้นตอน การตรวจสอบค่าตัวแปร การติดตาม Stack ของการเรียกฟังก์ชัน การวิเคราะห์ประสิทธิภาพ (Profiling) และการสร้างรายงาน Code Coverage ผ่าน XDebug นักพัฒนาจะเข้าใจการทำงานและสถานะของโค้ดแบบเชิงลึก ทำให้สามารถวิเคราะห์และแก้ไขปัญหาได้อย่างมีประสิทธิภาพ
XDebug มีโหมดการทำงานหลายแบบ โดยโหมดที่ใช้บ่อยที่สุดคือ debug
สำหรับการดีบักแบบโต้ตอบด้วยจุดหยุด (Interactive Breakpoint Debugging)
เปิดใช้งานและตั้งค่า XDebug ใน ServBay
ServBay ติดตั้ง XDebug ล่วงหน้าสำหรับทุกเวอร์ชัน PHP ที่รองรับ คุณไม่จำเป็นต้องดาวน์โหลดหรือคอมไพล์เอง
เปิดโมดูล XDebug: เปิดแอป ServBay ไปที่เมนู
ภาษา
>PHP
จากนั้นเลือกเวอร์ชัน PHP ที่ต้องการใช้งาน XDebug ในหมวดส่วนขยาย
ให้ค้นหาxdebug
และตรวจสอบว่าสถานะเป็น “เปิดใช้งาน” หากยังไม่เปิด ให้คลิกเพื่อเปิดใช้ หลังจากเปิดแล้ว อาจต้องรีสตาร์ท PHP-FPM (ซึ่ง ServBay มักจะจัดการให้อัตโนมัติ)ตั้งค่า IDE ของคุณ: ในโปรแกรม IDE ที่ใช้งาน เช่น PHPStorm หรือ VS Code ให้ตั้งค่า XDebug Connection โดยทั่วไปต้องระบุพอร์ตที่รับฟัง (ควรตรงกับการตั้งค่า XDebug ใน ServBay) หากโครงสร้างโปรเจกต์บนเครื่องต่างจากในเซิร์ฟเวอร์ อาจต้องตั้งค่า Remote Path Mapping (แต่ใน ServBay แบบโลคัลมักไม่ต้องตั้ง)
รายละเอียดการตั้งค่า IDE เพิ่มเติม
สำหรับวิธีการตั้งค่า XDebug บน IDE เฉพาะ (เช่น PHPStorm, VS Code ฯลฯ) โปรดดูคู่มือของ IDE นั้นๆ หรืออ่าน วิธีเปิดใช้ Xdebug ที่มากับ ServBay
ตัวอย่างใช้งานจริง: ดีบักโปรเจกต์ PHP บน ServBay
ลองดูตัวอย่างการดีบักโปรเจกต์ PHP อย่างง่ายด้วย XDebug บน ServBay
1. สร้างเว็บไซต์บน ServBay
ก่อนอื่นให้สร้างโฟลเดอร์โปรเจกต์สำหรับตัวอย่างนี้บน ServBay:
- สร้างโฟลเดอร์โปรเจกต์ใหม่ในไดเรกทอรีรากเว็บไซต์ของ ServBay:
/Applications/ServBay/www/
เช่น ชื่อservbay-xdebug-app
- เปิดแอป ServBay แล้วเข้าไปที่หมวด “เว็บไซต์”
- คลิกเพิ่มเว็บไซต์ใหม่ แล้วตั้งค่าโฟลเดอร์รากเป็น
/Applications/ServBay/www/servbay-xdebug-app
- กำหนดโดเมนท้องถิ่น เช่น
servbay-xdebug-app.servbay.demo
- เลือกเวอร์ชัน PHP ที่ต้องการใช้งาน และตรวจสอบว่าเปิดและตั้งค่า XDebug ไว้เรียบร้อย
- บันทึกและใช้การเปลี่ยนแปลง ServBay จะตั้งค่า Caddy/Nginx และอัปเดต hosts หรือ DNS ของ ServBay ให้อัตโนมัติ
2. โครงสร้างโปรเจกต์และตัวอย่างโค้ด
ในไดเรกทอรี /Applications/ServBay/www/servbay-xdebug-app/
สร้างไฟล์และโฟลเดอร์ตามนี้:
servbay-xdebug-app/
├── src/
│ └── Calculator.php
└── index.php
1
2
3
4
2
3
4
เนื้อหาไฟล์ src/Calculator.php
:
php
<?php
namespace App;
class Calculator
{
public function add($a, $b)
{
// ตั้งจุดหยุดดีบักที่บรรทัดนี้
return $a + $b;
}
public function subtract($a, $b)
{
return $a - $b;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
เนื้อหาไฟล์ index.php
:
php
<?php
// สมมติว่าคุณใช้ Composer โหลด autoloader ตรงนี้
// ถ้าไม่ได้ใช้ Composer ให้ปรับวิธีโหลดตามความเหมาะสม
require __DIR__ . '/vendor/autoload.php';
use App\Calculator;
echo "Debugging Example:\n";
$calculator = new Calculator();
$num1 = 5;
$num2 = 3;
$sum = $calculator->add($num1, $num2);
$difference = $calculator->subtract($num1, $num2);
echo "Sum: " . $sum . "\n";
echo "Difference: " . $difference . "\n";
echo "Done.\n";
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
หมายเหตุ: การเรียก require __DIR__ . '/vendor/autoload.php';
นี้อ้างอิงว่าคุณใช้ Composer หากต้องการทดสอบอย่างง่าย สามารถลบบรรทัดนี้ออกและเปลี่ยน use App\Calculator;
เป็น require __DIR__ . '/src/Calculator.php';
3. ตั้งจุดหยุดดีบัก (Breakpoint)
ใน IDE ของคุณ (เช่น PHPStorm) ให้เปิดไฟล์ /Applications/ServBay/www/servbay-xdebug-app/src/Calculator.php
แล้วคลิกที่หมายเลขบรรทัดข้าง return $a + $b;
เพื่อเพิ่ม Breakpoint
4. เริ่มต้น Debug Session
- ใน IDE ให้เริ่มฟัง Connection จาก XDebug โดยปกติใน PHPStorm คือคลิกปุ่ม “Start Listening for PHP Debug Connections” (สัญลักษณ์โทรศัพท์หรือแมลง)
- เปิดเว็บเบราว์เซอร์เข้าหน้า
index.php
ของเว็บไซต์:https://servbay-xdebug-app.servbay.demo/index.php
- หากตั้งค่า
xdebug.start_with_request
เป็นtrigger
ต้องแน่ใจว่าได้เพิ่ม XDebug Trigger ผ่านส่วนขยายเบราว์เซอร์หรือด้วยตนเอง (เช่น เข้าhttps://servbay-xdebug-app.servbay.demo/index.php?XDEBUG_TRIGGER=1
)
5. ขั้นตอนการดีบัก
- เมื่อบราวเซอร์เข้า
index.php
และ XDebug ถูกทริกเกอร์ XDebug จะเชื่อมกับ IDE และหยุดที่ Breakpoint ที่ตั้งไว้ - IDE จะเข้าสู่โหมดดีบัก แสดงโค้ดหยุดที่บรรทัดของ
add
ในไฟล์Calculator.php
6. ตรวจสอบค่าตัวแปร
- ในหน้าต่างดีบักของ IDE คุณจะเห็นบรรทัดปัจจุบัน Stack การเรียกใช้ฟังก์ชัน (Call Stack) และค่าตัวแปร (Variables)
- ในแผง “Variables” จะเห็นค่าของตัวแปรในสโคป เช่น
$a
เป็น5
,$b
เป็น3
7. การรันโค้ดทีละบรรทัด (Step Debug)
- ใช้ปุ่ม Step Debug ของ IDE เช่น
Step Over
(F8),Step Into
(F7),Step Out
(Shift+F8)Step Over
: รันบรรทัดปัจจุบัน ถ้าเจอฟังก์ชันจะไม่เข้าสู่ข้างใน แต่ข้ามไปบรรทัดถัดไปStep Into
: รันบรรทัดปัจจุบัน ถ้าเป็นการเรียกฟังก์ชันจะเข้าไปรันที่บรรทัดแรกของฟังก์ชันนั้นStep Out
: รันจนจบบล็อกของฟังก์ชัน แล้วเด้งกลับไปยังที่เรียกฟังก์ชันนี้
- สังเกตการเปลี่ยนค่าของตัวแปรและลำดับรันของโค้ดทีละบรรทัดได้
8. ดำเนินการโค้ดต่อ (Resume Program)
- คลิกปุ่ม “Resume Program” (ปุ่มเขียว Play หรือ F9) ใน IDE เพื่อให้โปรแกรมเดินหน้าต่อจนกว่าจะพบ Breakpoint ถัดไปหรือรันเสร็จ
9. ตรวจสอบผลลัพธ์ (Output)
หลังโปรแกรมรันเสร็จ ดูผลลัพธ์จากบราวเซอร์ (หรือบน CLI ถ้าดีบักแบบคอมมานด์ไลน์) สำหรับตัวอย่างนี้ คุณจะเห็น:
textDebugging Example: Sum: 8 Difference: 2 Done.
1
2
3
4
ข้อควรระวัง
- ไฟร์วอลล์: ตรวจสอบว่าไฟร์วอลล์ของระบบไม่ได้บล็อกพอร์ตที่ IDE ใช้งาน (ปกติคือ 9003)
- พอร์ตซ้ำซ้อน: พอร์ตที่ตั้งค่าให้ XDebug ใช้งานต้องไม่ถูกใช้โดยแอปพลิเคชันอื่น
- ผลกระทบต่อประสิทธิภาพ: หากตั้ง
xdebug.mode=debug
และxdebug.start_with_request=yes
ทุก Request ของ PHP จะพยายามเปิดโหมดดีบักเสมอ ซึ่งจะทำให้เว็บช้าลงมาก ขอแนะนำให้ปิด XDebug ไว้ หรือเปลี่ยนxdebug.start_with_request
เป็นtrigger
เพื่อเปิดแค่เมื่อดีบัก - ดีบักสคริปต์ CLI: XDebug สามารถใช้ดีบักคอมมานด์ไลน์ได้ ต้องตั้ง Environment Variable หรือใช้ออปชั่นเฉพาะใน CLI โปรดดูคู่มือ XDebug เพิ่มเติม
- เวอร์ชันและตั้งค่า IDE: รายละเอียดการตั้งค่าอาจแตกต่างไปตาม IDE เวอร์ชันหรือหน้าต่างตั้งค่า โปรดศึกษาจากคู่มือทางการของ IDE
คำถามที่พบบ่อย (FAQ)
ถาม: IDE ของฉันเชื่อมต่อ XDebug ไม่ได้ ควรทำอย่างไร?
ตอบ: ตรวจสอบดังนี้
- ให้แน่ใจว่าเปิดใช้ XDebug ใน ServBay สำหรับ PHP เวอร์ชันที่คุณใช้แล้ว
- เช็กการตั้งค่าใน
php.ini
เช่นxdebug.mode
,xdebug.client_host
,xdebug.client_port
ว่าค่าตรงกับการตั้งค่าของ IDE - ถ้าใช้
xdebug.start_with_request = trigger
ให้เช็กว่าคุณเพิ่ม Trigger ถูกต้อง (GET/POST, Cookie, Header) - ตรวจสอบว่าระบบปฏิบัติการเปิดพอร์ตที่ XDebug ใช้งาน
- ตรวจสอบว่า IDE กำลังฟังพอร์ตนั้นอยู่
ถาม: ทำไมเว็บไซต์ช้าหลังเปิด XDebug?
ตอบ: ส่วนใหญ่เกิดเพราะตั้ง xdebug.start_with_request
เป็น yes
ทุก Request จะเปิดโหมดดีบักและช้ากว่าปกติ ควรตั้งเป็น trigger
เพื่อดีบักเฉพาะเวลาต้องการ
ถาม: สามารถดีบัก AJAX ด้วย XDebug ได้ไหม?
ตอบ: ได้ คุณต้องแน่ใจว่า AJAX Request มี Trigger ของ XDebug เพิ่มเข้าไปด้วย (เช่นโดยการตั้ง Cookie หรือ Header)
ถาม: ServBay รองรับการดีบัก XDebug บน VS Code หรือ IDE อื่นๆ ไหม?
ตอบ: รองรับ XDebug ที่มากับ ServBay เป็น PHP Extension มาตรฐาน ที่ใช้กับ IDE หรือ Editor ที่รองรับโปรโตคอล DBGp ได้ทั้งหมด เช่น VS Code (ใช้ PHP Debug Extension), NetBeans, Eclipse เป็นต้น วิธีตั้งค่าคล้ายๆ กันคือตั้งให้ IDE ฟังพอร์ตเหมือนกัน
สรุป
ด้วย XDebug ที่ติดตั้งมากับ ServBay นักพัฒนาจะสามารถดีบักโปรเจกต์ PHP ในสภาพแวดล้อมโลคัลอย่างมืออาชีพ ใช้งานจุดหยุด การตรวจสอบตัวแปร และการรันทีละขั้นตอน เพื่อยกระดับความรวดเร็วและแม่นยำในการหาบั๊กและแก้ไขปัญหา รักษาคุณภาพโค้ดได้เป็นอย่างดี เมื่อทำงานร่วมกับระบบจัดการสภาพแวดล้อมของ ServBay แล้ว XDebug จะกลายเป็นเครื่องมือสำคัญใน Workflow การพัฒนา PHP เริ่มดีบักด้วย XDebug บน ServBay แล้วคุณจะพบกับประสบการณ์ที่คล่องตัวและประสิทธิภาพสูงยิ่งขึ้น!