พิมพ์

xdebug

โพสต์เมื่อ: วันพฤหัสบดี 5 กรกฎาคม 2555  21:20 น.

ติดตั้ง xdebug และการใช้ netbean ในการ debug php

อ้างอิงจาก เว็บของ netbean.org , xdebug.org

ในเขียน php เคยเบื่อบ้างหรือไม่ ที่จะต้องตรวจสอบโค้ด หรือ ตรวจสอบความเร็วโค้ด PHP ที่เราเขียน ซึ่งมักจะมีขั้นตอนที่วุ่นวาย
ตั้งแต่นั่งไล่ดูโค้ด ตรวจสอบตรรกะ ใส่ฟังก์ชั่นคำนวนเวลาไว้ที่หัวและท้ายของ file ทีละ file พอจะไม่ใช้ทีหนึ่งก็ต้องลบออกทีละ file
เวลาที่โปรแกรมทำงานผิดพลาด ก็ต้องนั้งใล่ bug กันหัวแตก ใส่ code ตรวจสอบเข้าไปอีก เสียเวลามาก

เลยมีคนที่คิดค้นเครื่องที่มีชื่อว่า xdebug ใช้สำหรับการตรวจสอบ code php ระหว่างที่โปรแกรมกำลังทำงาน และมีความสามารถอื่น ๆ อีกหลายอย่าง

ในเว็บจะมีวิธีการ ติดตั้ง xdebug ใน windows , mac และ linux แต่ผมอธิบายสำหรับการติดตั้งลง windows อย่างเดียว เพราะไม่ได้ลง  linux และไม่มีเครื่อง mac  

ก่อนอื่นให้ไป download xdebug ที่เว็บ http://xdebug.org/download.php

อ๊ะมันมีหลาย version แล้วจะ download version อะไรดี ?

ก่อนอื่นเราต้องตรวจสอบ version ของ php ที่อยู่ในเครื่องเราก่อน
สร้าง file
พิมพ์ http://localhost/phpinfo.php
เปิดดูที่เว็บ browser
จะเห็นข้อความประมาณนี้



ตรวจสอบ version ดู จากรูปจะเป็น php verstion 5.2.6-3

และสิ่งที่จะต้องดูต่อไปคือ
Thread Safety



สรุปคือตอนนี้เราต้องการ xdebug สำหรับ php 5.2 และไม่ต้องการ  Thread Safety
ในภาพมันเป็นระบบ linux แต่้ถ้าเป็นระบบ windows จะเป็น  Thread Safety

1 ให้ download xdebug มา
2 copy php_xdebug-2.1.0-5.2-vc6.dll ไปที่ foloder ที่เก็บ php extension ของผมจะเป็น C:\AppServ\php5\ext\
3 เปิด php.ini โดยส่วนใหญ่จะอยู่ใน c:\windows\php.ini

เพิ่มสิ่งนี้ไปที่ท้ายบรรทัด

[XDebug]
;; Only Zend OR (!) XDebug
zend_extension_ts = "C:\AppServ\php5\ext\php_xdebug-2.1.0-5.2-vc6.dll"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = "./"

หมายเหตุ
xdebug.remote_port ต้องเป็น port ที่ตรงกับ debugger port ของ netbean
ตรวจสอบได้จาก tools->options->php แต่โดยปกติจะเป็น port 9000

ถ้าเป็น php ตั้งแต่ version 5.3 ขึ้นไปให้เปลี่ยน zend_extension_ts เป็น  zend_extension

4. เปิด netbean ไปที่ tools->options->php ตรง session id กำหนด netbeans-xdebug
5. restart server


เปิด
http://localhost/phpinfo.php
มองหา xdebug ข้างล่างถ้ามีรูปนี้แสดงว่าใช้ได้แล้ว



ที่มา : http://www.zone-it.com/b47/182216
[ ความเห็นที่ 1]

ชาวเราเหล่าผู้พัฒนาโปรแกรมด้วยภาษา PHP ยามเหลียวมองไปดูเพื่อนบ้านอย่าง asp.net มันช่างน่าน้อยเนื้อต่ำใจเสียนี่กะไร

asp.net มีเครื่องมือชั้นยอดไว้สำหรับสร้างแอพ ชุดเครื่องมือจากเฮียบิลมาพร้อมคำสั่งดีบักที่ทรงประสิทธิภาพ ทำให้การเขียนโปรแกรมเป็นไปอย่างรวดเร็ว หาที่ผิดพลาดของโปรแกรมได้ง่าย อยากให้หยุดโปรแกรมตรงไหนเพื่อตรวจสอบค่าตัวแปร ก็เพียงแค่เซ็ต break point แล้วเล่นโปรแกรมไปตามปกติ เมื่อโปรแกรมรันมาถึงจุดที่มาร์คไว้ มันก็หยุด เราก็ทำการชำแหละตัวแปร

PHP รึ เซ็งหง่าว ต้องประยุกใช้คำสั่งเอาเองเพื่อทำการดีบักโปรแกรม จนผมต้องเขียนบทความรวบรวมคำสั่งเหล่านั้นไว้ให้อ่านกันเมื่อเร็วๆนี้ คำสั่งสำหรับดีบัก PHP

 

แต่แล้วเมื่อผมได้เจอกับ x-debug (อันที่จริงผมเจอมันนานแล้วล่ะ แต่ไม่รู้วิธีใช้) และใช้มันร่วมกับ Netbean 7.0 ผมก็มองเห็นสวรรค์รำไร อย่างกะเด็กดมกาว

x-debug นั้นมันจะช่วยให้ Netbean 7.0 สามารถทำการดีบักโปรแกรมได้ใกล้เคียงกับ วิชวลสตูดิโอ ของทางฝั่งไมโครซอฟต์ มาดูวิธีกันเถอะครับ ผมเชื่อว่าท่านที่ใช้ Netbean 7.0 เป็นเครื่องมือพัฒนา PHP อยู่แล้ว จะต้องหลงรักเข้าเต็มปอด

วิธีการจะแบ่งออกเป็น 2 ช่วง

1. ติดตั้งไลบรารี x-debug เข้าไปเป็นส่วนหนึ่งของตัวประมวลผล PHP

2. ตั้งค่าใน Netbean 7.0 เล็กน้อย

(optional) ทดสอบดีบักโค้ด PHP

ติดตั้งไลบรารี x-debug

1. เข้าไปที่เว็บไซต์  http://xdebug.org/find-binary.php หน้านี้จะเป็นวิซาดคอยช่วยเลือกไฟล์ที่ท่านจะต้องดาวน์โหลด และให้คำแนะนำ (แต่ตอนนี้มันเป็นแค่ชองป้อนข้อมูลว่างๆ ขาวๆ) ก่อนอื่นเลยท่านจะต้องก้อปปี้ข้อความที่ได้จากคำสั่ง phpinfo() มาวางในนี้แล้วกดปุ่ม Analyse my phpinfo() output เพื่อให้มันช่วยวิเคราะห์ว่าเราควรจะต้องดาวน์โหลดไฟล์ x-debug ตัวไหน เวอร์ชั่นอะไร ไปติดตั้ง เพราะแต่ละเครื่องสภาพแวดล้อมในการพัฒนา PHP ไม่เหมือนกัน ถ้าท่านไม่รู้ว่า phpinfo() เขียนยังไง ให้ไปอ่านบทความผมที่  http://www.select2web.com/php/how-to-check-php-version.html
xdebug-01

เมื่อท่านรันคำสั่ง phpinfo() แล้วให้ ctrl+a ก้อปปี้ล่อข้อความทั้งหมดมาเลย โดยไม่ต้องสนใจว่ามันจะมีอะไรบ้างอยู่ข้างใน เอามาวางในช่องว่างๆนั่นแหละแล้วกดปุ่ม Analyse my phpinfo() output
xdebug-02

xdebug-03

2. ดาวน์โหลดไฟล์ที่เขาให้ลิ้งก์มา
xdebug-04

3. ทำตามคำแนะนำของเขาข้อสอง คือเอาไฟล์ที่ดาวน์โหลดมาไปเก็บไว้ที่ C:\AppServ\php5\ext

4. สร้างโฟลเดอร์เปล่าๆชื่อ tmp ไว้ที่ C:\AppServ

5. เปิดไฟล์ php.ini ขึ้นมา เอาคำสั่งด้านล่างไปเพิ่มบรรทัดล่างสุด มันคือเอาไปต่อท้ายนั่นแหละ

[XDebug]
; Only Zend OR (!) XDebug
zend_extension_ts = C:\AppServ\php5\ext\php_xdebug-2.1.1-5.2-vc6.dll
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
; Port number must match debugger port number in NetBeans IDE Tools > Options > PHP
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\AppServ\tmp"

แก้บรรทัด ให้เป็นไปตามคำแนะนำข้อสามของเขาด้วย

zend_extension_ts = C:\AppServ\php5\ext\php_xdebug-2.1.1-5.2-vc6.dll

6. เสร็จเรียบร้อย บันทึก แล้วก็รีสตาร์ท apache ซะ ถ้าทำไม่เป็นไปอ่านบทความนี้ วิธีรีสตาร์ท apache เพื่อความชัวให้ลองรันคำสั่ง phpinfo() ดู น่าจะเห็นว่า x-debug ติดตั้งเรียบร้อยแล้ว

ตั้งค่าใน Netbean 7.0

1. ไปที่ Tools > Options

2. ไปที่แท็บ PHP ติ๊กเครื่องหมายถูกหน้า Stop at First Line ออก เสร็จแล้ว OK ซะ เพื่อทำการบันทึก
xdebug-05

ทดสอบดีบักโค้ด PHP

1. เปิด netbean ขึ้นมา สร้างไฟล์ชื่อ test-debug.php

2. ก้อปปี้โค้ดด้านล่างไปวางในไฟล์

function WorkingDays($year, $month, $day) {
    if (!$year)
        $year = date('Y');
    if (!$month)
        $month = date('m');
    if (!$day)
        $day = date('d');
 
    //create a start and an end datetime
    $startdate = strtotime($year . '-' . $month . '-01');
    $enddate = strtotime($year . '-' . $month . '-' . $day);
    $currentdate = $startdate;
 
    while ($currentdate <= $enddate) {
        //if not Saturday or Sunday, +1
        if (!((date('D', $currentdate) == 'Sat') || (date('D', $currentdate) == 'Sun') )) {
            $return = $return + 1;
        }
        $currentdate = strtotime('+1 day', $currentdate);
    } //end date walk loop
    //return the number of working days
    return $return;
}
 
echo WorkingDays(2011,4,30);

3. ทำการเซ็ต break point โดยการคลิกลงไปที่เลขบรรทัด อยากให้โปรแกรมหยุดที่บรรทัดไหนก็ คลิกตัวเลขบรรทัดนั้น แล้วทั้งบรรทัดก็จะถูกคาดแดงไว้ ไม่ต้องห่วงโค้ดไม่ได้รับผลกระทบใดๆ
xdebug-06

4. ไปที่เมนู Debug > Debug File หรือจะกดปุ่ม Ctrl+Shift+F5 ก็ได้
โปรแกรมมันจะรันไฟล์ PHP ของเราแล้วก็มาหยุดอยู่ตรง break point

5. ลองเอาเมาส์ชี้ไปที่ตัวแปรต่างๆ มันจะขึ้นทูลทิปแสดงค่าที่อยู่ภายในให้ท่านเห็นอย่างละเอียด ทุกตัว
xdebug-07

เครื่องมือชุดนี้สำหรับการดีบัก ลองคลิกเล่นดูก็จะเข้าใจเองว่ามันทำงานยังไง
xdebug-08

ที่มา : http://www.select2web.com/netbean/netbean-7-and-x-debug-power.html