Tag Archive xdebug

php: xdebug

การเขียน unit testing หรือทำ uat โปรแกรมที่เขียนว่ามีข้อบกพร่องบ้างหรือเปล่า การ debug ใน php จะนิยมใช้ XDEBUG EXTENSION FOR PHP การติดตั้ง xdebug ใน xampp ไม่ยากเลย (ง่ายกว่าใน docker ตั้งเยอะ) ผมเคยเขียนการติดตั้งไว้ใน ตรวจสอบโค้ดและวัดความเร็ว PHP ด้วย xdebug แต่ไม่ได้อธิบายขั้นตอนอย่างละเอียดเอาไว้ ครั้งนี้จะเขียนวิธีอย่างละเอียด

การติดตั้ง xdebug

  1. download extension มาจาก XDEBUG EXTENSION FOR PHP | DOWNLOADS
    แต่ถ้าไม่แน่ใจ ทางผู้พัฒนาได้ทำ Tailored Installation Instructions ไว้ให้ แค่ copy หน้า phpinfo ของเว็บที่เราใช้มาวางใน textarea แล้วกด Analyse my phpinfo() output ก็จะได้ version และ config มาแล้ว
  2. นำไฟล์ .dll ไปไว้ใน php’s Extensions directory: เช่น C:\xampp\php\ext
  3. เปิดไฟล์ php’s Configuration File: เช่น C:\xampp\php\php.ini เพิ่มคอนฟิก
    [Xdebug]
    xdebug.profiler_append = 1
    xdebug.profiler_enable = 0
    xdebug.profiler_enable_trigger = 0
    xdebug.profiler_output_dir = "C:\xampp\tmp"
    xdebug.profiler_output_name = cachegrind.out.%t.%p
    xdebug.remote_enable = true
    xdebug.remote_handler = "dbgp"
    xdebug.remote_host = "localhost"
    xdebug.remote_port = 9000
    xdebug.trace_output_dir = "C:\xampp\tmp"
    zend_extension = "C:\xampp\php\ext\php_xdebug-2.5.5-7.1-vc14.dll"

    ด้านล่างของไฟล์

  4. เปิดและปิด Apache ใหม่อีกครั้ง

เปิดหน้า phpinfo อีกครั้ง ลองค้นหาคำว่า xdebug อีกครั้ง ถ้าเจอแปลว่าการติดตั้งเสร็จแล้ว

ตรวจสอบโค้ดและวัดความเร็ว PHP ด้วย xdebug

การที่ script php เราทำงานไม่เป็นไปตามจุดประสงค์ ปัญหาที่พบบ่อยคือ ตัวแปร หรือการทำงานของโปรแกรมของเราไม่ทำงานที่ได้วางแผนเอาไว้ การหาสาเหตุโดยวิธี echo ค่าตัวแปรออกมาบางครั้งกว่าจะหาเจอก็ต้องแสดงค่า กันวุ่นวายใช้เวลากว่าจะเจออาจจะต้องแก้ไขไฟล์กันหลายครั้ง และอาจจะทำให้โปรแกรมทำงานผิดพลาดจากการที่ลบส่วน debug ออกไปไม่ครบ

ถ้าใช้ xampp เป็น server จะมี xdebug ติดมาช่วยแก้ปัญหาจุดนี้โดยเราสามารถใช้ ใช้ WinCacheGrind (หรือ KCacheGrind บน linux) เปิดไปที่โฟลเดอร์ที่เราตั้งค่าไว้ใน xdebug.profiler_output_dir ซึ่งไฟล์จะมีชื่อเป็น cachegrind.out.XXX (XXX = ตัวเลขตามหลัง)ช่วยแสดงตัวแปร เวลาการทำงาน ของแต่ละคำสั่ง,ฟังก์ชั่น,คลาส ให้เราดูอย่างละเอียด

แต่ถ้าติดตั้ง server ด้วย appserv หรือติดตั้งเองทั้งหมด สามารถลงเพิ่มเติมได้โดยใช้เครื่องมือ Tailored Installation Instructions เพียง copy รายงานจาก function phpinfo() ลงไปจะได้วิธีการติดตั้งและเลือก version ที่เหมาะกับเครื่องของคุณอัตโนมัติครับ โอ้มายลอร์ด (ผมเป็นพุทธ อาจารย์สอนว่าเขาอุทานกันอย่างนี้นะ) มันยอดมาก ทำไม php library อื่นๆ ไม่เอาอย่างบ้างนะ