Php debug with netbeans
ก่อนที่เราจะทำการ Debug ได้นั้นต้องเริ่มจากการ config ก่อนครับโดยที่
ใน Entry นี้เราจะมาเกริ่นคร่าวๆกันก่อนนะครับว่า แต่ละปุ่มเวลา Debug มันมีอะไรกันบ้าง
ภาพข้างบนนี้เป็นภาพที่เราได้สร้าง โปรเจคไว้ก่อนแล้ว เอาเป็นว่าปุ่มที่เราใช้เวลา Debug นั้นหน้าตามันเป็นตามภาพตัวอย่างนี้เลยนะครับ ส่วนจุดสีแดงๆที่เห็นในโค้ดจุดนั้นก็เป็นจุดที่เรา Breakpoint เอาไว้ เวลาที่เราทำการ Debug มันก็จะไปหยุดที่จุดสีแดงๆนั้นหละครับ
คีย์ลัดในการใช้งาน
Ctrl + F5 : Debug project
ส่วนการ สร้าง Breakpoint ใน Netbeans นั้นสามารถที่จะคลิกที่ตัวเลขของบรรทัดนั้นๆได้เลยครับ
หลังจากที่เรากดปุ่ม Debug ไปแล้วจะมีปุ่มเพิ่มขึ้นมาทางขวามือครับ
มีรายละเอียดดังต่อไปนี้ครับ
Shift + F5 : Finish dbugger session
F5 : Continue
F8 : Step Over
F7 : Step Info
Ctrl + F7 : Step Out
F4 : Run to cursor
ทีนี้ผมจะลองทดสอบกับ Joomla ดูนะครับ โดยในตัวอย่างนี้ผมได้ install component ง่ายๆเข้าไปหนึ่งตัว(com_hello)แล้วไปก๊อบเอาตัวอย่างจากในเว็บของ Netbeans มาใช้งาน ^^
จากภาพด้านบนผมได้ Breakpoint เอาไว้หนึ่งจุดในหน้าทีใช้แสดงผลของ com_hello นะครับจากนั้นก็คลิกที่ปุ่ม Debug project(Ctrl+F5)
ในตอนแรกมันจะมีลูกศรสีเขียวๆเกิดขึ้นใน file index.php ครับถ้าเรากลับไปดูที่หน้า Browser ของเราจะเห็นว่ามันกำลัง Loading... อยู่อย่างนี้คือ Debug ติดครับ
กลับไปที่ Netbeans ก่อนนะครับ จากนั้นให้เราลอง Step Over ไปเรื่อยๆจะเห็นว่ามันไม่วิ่งไปยังจุดที่เราได้ Breakpoint เอาไว้นั่นก็เพราะว่ามันยังอยู่ในหน้าของ com_content ครับ ไม่ใช่ com_hello
หลังจากที่ตัว Loading... หายไปแล้ว( F8 ไปเรื่อยๆ) ให้เราปรับ url เป็น
http://localhost/hellophp/index.php?option=com_hello
หลังจากที่ Enter ไปแล้วคราวนี้หละครับมันจะไปหยุดตรงจุดที่เราได้ Breakpoint เอาไว้
กลับไปที่ Netbeans เราจะเห็นว่ามันอยู่ที่หน้า index.php เหมือนเดิมแต่ในคราวหน้าให้เรากด Continue(F5) ครับ
จะเห็นว่าคราวหน้ามันมาหยุดตรงจุดที่เรา Breakpoint เอาไว้พอดิบพอดี ^^ ทีนี้ลอง Step Info ไปสามครั้งครับ
จะเห็นแถบ Debug ของเราวิ่งเข้า function calculate_sum_of_factorials ซึ่งข้างใน function นี้ก็จะมี function อีกสองตัวคือ calculate_factorial กับ calculate_sum ทีนี้ให้เราลอง Step Over(F8) ดูครับ
จะเห็นว่ามันไม่วิ่งเข้า function calculate_factorial นี่หละครับคือ Step over จากนั้นลอง Step Info ดูอีกทีครับ
คราวนี้มันวิ่งเข้าไปใน function calculate_factorial ... แล้วทีนี้เราจะออกมายังไงเพราะถ้า Step Info นี่คงต้องวนอยู่ใน for อีกหลายรอบเป็นแน่แท้... เราก็ Step Out ดูครับ
มันจะเด้งออกมาอยู่ที่ function calculate_sum แล้วเห็นป่ะ ^_____^ แต่ยังเหลืออีกหนึ่งตัวที่เรายังไม่ลองครับนั่นคือ... Run to cursor(F4) นั่นเอง... ว่าแล้วก็เอาเม้าส์ไปคลิกที่หน้า echo "The sum... เลยครับ
แล้วก็ลอง F4 เลยครับ
มันก็จะข้าม function calculate_sum ไปเลยแล้วก็มาแสดงที่ตรง echo ทันที ^^
เอาเป็นว่าพอจะเข้าใจหลักการคร่าวๆของการ Debug ไปแล้วนะครับ
ทีนี้มีอีกหนึ่งอย่างที่พลาดไม่ได้ในระหว่างที่เรานั้นทำ Debug คือการ Watch เพื่อดูค่าตัวแปรครับ
จากภาพด้านบนนี้มาจากช่วงตอนที่เราทำการ Debug นั่นหละครับถ้ามองลงมาด้านล่างๆของหน้าจอเราจะเห็น Tab ที่มีชื่อว่า Variables ครับใน Tab ตัวนี้จะอธิบายถึงตัวแปรต่างๆที่ใช้งานอยู่ว่ามี Type และ Value เป็นอะไรบ้าง
ซึ่งก่อนจะ Watch ได้นั้นก็ต้องการทำ Set ค่ากันก่อนโดยไปที่ Tools > Options > PHP > ติ๊กที่ Watches and Balloon Evaluation ครับ
ทีนี้เรามาลอง Watch กันดูครับว่าจะเป็นอย่างไรบ้าง โดยในระหว่างที่เรา Debug อยู่นั้นให้เรา New Watch(Ctrl+Shift+F7) หรือ ที่เมนูไปที่ Debug > New Watch... แล้วใส่ค่าตัวนี้เข้าไป
จากนั้นลอง Debug มาเรื่อยๆจนถึงบรรทัด return $result; ครับ
จะเห็นว่าตัว $factorial1-$factorial2 ที่เราใส่ไว้ครั้งแรกแสดงผลตรงกันข้ามกับที่ return ออกมาจาก function นั่นแสดงให้เห็นว่าในช่วงที่เราทำการ Debug อยู่นั้นเราสามารถที่จะเปลี่ยนค่าตัวแปรได้เพื่อที่จะทำการตรวจสอบในกรณีที่โปรแกรมของเรามีความผิดเพี้ยนนั่นเอง
ในเอ็นทรี่นี้คงจะไม่ยากเกินไปนะครับ ^^
ปล. ตัวอย่างของโค้ดชุดนี้ที่เป็นตัวอย่างการคำนวณไปดาวโหลดใน Link ข้างล่างได้เลยครับ
อ้างอิง
บทความที่เกี่ยวข้อง
- เริ่มจากเปิด php.ini ก่อนเลยครับด้วย Text editor ตัวไหนก็ได้แล้วแต่ความถนัด
Path file ของ Xampp จะเป็นดังนี้ครับ
C:\xampp\php\php.ini
เมื่อเปิดขึ้นมาแล้วให้เลื่อนลงมาด้านล่างครับจะเห็น [Zend] กับ [Xdebug] ให้เราคอมเม้นในส่วนของ [Zend] เอาไว้ให้หมดเลยครับโดยใช้เครื่องหมาย Semicolon( ; ) ครับแล้วให้เปิดคอมเม้นของ [Xdebug] แทน ตามภาพเลยนะครับ
ในที่นี้จะเห็นว่า ผมได้เปลี่ยน xdebug.remote_port เป็น 10000 แทนที่จะเป็น 9000 ส่วนหนึ่งเพราะมีการใช้งาน port 9000 ไปแล้วกับ Eclipse (ถ้ามี debug ตัวเดียวก็ใช้ Port 9000 ต่อได้เลยครับ)
- จากนั้นให้เราทำการ Restart Xampp ครับ
ใน Window สามารถใช้งาน xampp_restart.exe ได้เลยครับ
หลังจากที่ Restart xampp ไปแล้วสามารถเช็คว่า เราเปิด Xdebug แล้วรึยังได้ดังนี้ครับ
คือเข้าไปที่ http://localhsot/xamp จากนั้นคลิกที่ phpinfo() ครับแล้วเราก็ดู Xdebug เราครับว่า enabled แล้วรึยังถ้า enabled ได้จะเป็นตามภาพเลยครับ (ตัว Version อาจจะเปลี่ยนไปตามรุ่นของ Xampp ต่างๆ) - จากนั้นมาดูที่ตัวของ Netbeans กันบ้างครับโดยเข้าไปที่ Tools > Options
จากนั้นให้คลิกที่ Tab ของ PHP ครับแล้วก็เลือกไฟล์ php.ini ที่เราพึ่งแก้ไปเมื่อตะกี้ แล้วก็เลือก Debugger Port ตามใน xdebug.remote_port ที่เราเคยแก้ในข้อแรกครับเสร็จแล้วคลิก OK เป็นอันเสร็จเรียบร้อยครับสำหรับการตั้งค่า
ใน Entry นี้เราจะมาเกริ่นคร่าวๆกันก่อนนะครับว่า แต่ละปุ่มเวลา Debug มันมีอะไรกันบ้าง
ภาพข้างบนนี้เป็นภาพที่เราได้สร้าง โปรเจคไว้ก่อนแล้ว เอาเป็นว่าปุ่มที่เราใช้เวลา Debug นั้นหน้าตามันเป็นตามภาพตัวอย่างนี้เลยนะครับ ส่วนจุดสีแดงๆที่เห็นในโค้ดจุดนั้นก็เป็นจุดที่เรา Breakpoint เอาไว้ เวลาที่เราทำการ Debug มันก็จะไปหยุดที่จุดสีแดงๆนั้นหละครับ
คีย์ลัดในการใช้งาน
Ctrl + F5 : Debug project
ส่วนการ สร้าง Breakpoint ใน Netbeans นั้นสามารถที่จะคลิกที่ตัวเลขของบรรทัดนั้นๆได้เลยครับ
หลังจากที่เรากดปุ่ม Debug ไปแล้วจะมีปุ่มเพิ่มขึ้นมาทางขวามือครับ
มีรายละเอียดดังต่อไปนี้ครับ
- ปุ่มสีแดงๆเอาไว้หยุด Debug ครับ
- ปุ่มสีเขียวคลิกแล้วมันจะวิ่งไปยังจุดที่เราได้ Breakpoint เอาไว้จุดแรกครับ
- ปุ่มที่มีลูกศรเวียนซ้ายคือปุ่ม Step Over ครับพอเราคลิกแล้วมันจะวิ่งข้าม function หรือ class นั้นๆไปเลย
- ปุ่มที่มีลูกศรลงคือ Step Into ครับคลิกแล้วมันจะวิ่งเข้าไปใน function หรือ class นั้นๆ
- ปุ่มลูกศรขึ้นคือ Step Out ใช้ต่อจาก Step Into ครับนั่นคือพอเราเข้ามาใน function หรือ class แล้วเราอยากออกไปข้างนอกก็คลิกที่ปุ่มนี้หละครับ
- ปุ่มสุดท้ายคือ Run to Cursor คลิกแล้วมันจะวิ่งไปยัง Cursor ที่เราคลิกที่บรรทัดนั้นๆครับ
Shift + F5 : Finish dbugger session
F5 : Continue
F8 : Step Over
F7 : Step Info
Ctrl + F7 : Step Out
F4 : Run to cursor
ทีนี้ผมจะลองทดสอบกับ Joomla ดูนะครับ โดยในตัวอย่างนี้ผมได้ install component ง่ายๆเข้าไปหนึ่งตัว(com_hello)แล้วไปก๊อบเอาตัวอย่างจากในเว็บของ Netbeans มาใช้งาน ^^
จากภาพด้านบนผมได้ Breakpoint เอาไว้หนึ่งจุดในหน้าทีใช้แสดงผลของ com_hello นะครับจากนั้นก็คลิกที่ปุ่ม Debug project(Ctrl+F5)
ในตอนแรกมันจะมีลูกศรสีเขียวๆเกิดขึ้นใน file index.php ครับถ้าเรากลับไปดูที่หน้า Browser ของเราจะเห็นว่ามันกำลัง Loading... อยู่อย่างนี้คือ Debug ติดครับ
กลับไปที่ Netbeans ก่อนนะครับ จากนั้นให้เราลอง Step Over ไปเรื่อยๆจะเห็นว่ามันไม่วิ่งไปยังจุดที่เราได้ Breakpoint เอาไว้นั่นก็เพราะว่ามันยังอยู่ในหน้าของ com_content ครับ ไม่ใช่ com_hello
หลังจากที่ตัว Loading... หายไปแล้ว( F8 ไปเรื่อยๆ) ให้เราปรับ url เป็น
http://localhost/hellophp/index.php?option=com_hello
หลังจากที่ Enter ไปแล้วคราวนี้หละครับมันจะไปหยุดตรงจุดที่เราได้ Breakpoint เอาไว้
กลับไปที่ Netbeans เราจะเห็นว่ามันอยู่ที่หน้า index.php เหมือนเดิมแต่ในคราวหน้าให้เรากด Continue(F5) ครับ
จะเห็นว่าคราวหน้ามันมาหยุดตรงจุดที่เรา Breakpoint เอาไว้พอดิบพอดี ^^ ทีนี้ลอง Step Info ไปสามครั้งครับ
จะเห็นแถบ Debug ของเราวิ่งเข้า function calculate_sum_of_factorials ซึ่งข้างใน function นี้ก็จะมี function อีกสองตัวคือ calculate_factorial กับ calculate_sum ทีนี้ให้เราลอง Step Over(F8) ดูครับ
จะเห็นว่ามันไม่วิ่งเข้า function calculate_factorial นี่หละครับคือ Step over จากนั้นลอง Step Info ดูอีกทีครับ
คราวนี้มันวิ่งเข้าไปใน function calculate_factorial ... แล้วทีนี้เราจะออกมายังไงเพราะถ้า Step Info นี่คงต้องวนอยู่ใน for อีกหลายรอบเป็นแน่แท้... เราก็ Step Out ดูครับ
มันจะเด้งออกมาอยู่ที่ function calculate_sum แล้วเห็นป่ะ ^_____^ แต่ยังเหลืออีกหนึ่งตัวที่เรายังไม่ลองครับนั่นคือ... Run to cursor(F4) นั่นเอง... ว่าแล้วก็เอาเม้าส์ไปคลิกที่หน้า echo "The sum... เลยครับ
แล้วก็ลอง F4 เลยครับ
มันก็จะข้าม function calculate_sum ไปเลยแล้วก็มาแสดงที่ตรง echo ทันที ^^
เอาเป็นว่าพอจะเข้าใจหลักการคร่าวๆของการ Debug ไปแล้วนะครับ
ทีนี้มีอีกหนึ่งอย่างที่พลาดไม่ได้ในระหว่างที่เรานั้นทำ Debug คือการ Watch เพื่อดูค่าตัวแปรครับ
จากภาพด้านบนนี้มาจากช่วงตอนที่เราทำการ Debug นั่นหละครับถ้ามองลงมาด้านล่างๆของหน้าจอเราจะเห็น Tab ที่มีชื่อว่า Variables ครับใน Tab ตัวนี้จะอธิบายถึงตัวแปรต่างๆที่ใช้งานอยู่ว่ามี Type และ Value เป็นอะไรบ้าง
ซึ่งก่อนจะ Watch ได้นั้นก็ต้องการทำ Set ค่ากันก่อนโดยไปที่ Tools > Options > PHP > ติ๊กที่ Watches and Balloon Evaluation ครับ
ทีนี้เรามาลอง Watch กันดูครับว่าจะเป็นอย่างไรบ้าง โดยในระหว่างที่เรา Debug อยู่นั้นให้เรา New Watch(Ctrl+Shift+F7) หรือ ที่เมนูไปที่ Debug > New Watch... แล้วใส่ค่าตัวนี้เข้าไป
$factorial1+$factorial2แล้วก็ OK
จากนั้นลอง Debug มาเรื่อยๆจนถึงบรรทัด return $result; ครับ
จะเห็นว่าตัว $factorial1-$factorial2 ที่เราใส่ไว้ครั้งแรกแสดงผลตรงกันข้ามกับที่ return ออกมาจาก function นั่นแสดงให้เห็นว่าในช่วงที่เราทำการ Debug อยู่นั้นเราสามารถที่จะเปลี่ยนค่าตัวแปรได้เพื่อที่จะทำการตรวจสอบในกรณีที่โปรแกรมของเรามีความผิดเพี้ยนนั่นเอง
ในเอ็นทรี่นี้คงจะไม่ยากเกินไปนะครับ ^^
ปล. ตัวอย่างของโค้ดชุดนี้ที่เป็นตัวอย่างการคำนวณไปดาวโหลดใน Link ข้างล่างได้เลยครับ
อ้างอิง
บทความที่เกี่ยวข้อง
- Install Xampp
- Install Java SE and Netbeans
- Create project in Netbeans
- PHP Debug with Netbeans
- Subversion with Netbeans
Comments
Post a Comment