ใช้ Zend Debugger ยังไง (จาก Youtube)

มีคนถามผมมาทันควันหลังจากโพส blog entry ตั้งค่า Zend Optimizer กับ Zend Debugger ให้ทำงานพร้อมกันได้

งั้นผมก็ขออธิบานสักเล็กน้อยแล้วก็ดูว่ามันทำงานยังไงดีกว่า

Zend Debugger ระบบพื้นฐานในการทำ remote debugging หรือจะแปรให้มันเป็นไทยแท้ ๆ ก็คือ debug ตัว code ของ php แบบ realtime ในระหว่างการทำงานเลย โดยปกติแล้วเนี่ย เราจะใช้ความสามารถนี้ได้เมื่อลง Zend Core หรือ Zend Platform เท่านั้น แต่คราวนี้ไม่ต้องแหละ เมื่อนานมาแล้ว (จริง ๆ จะใช้ว่าเร็ว ๆ นี้ก็กะไรอยู่ เพราะว่ามันก็ไม่เร็ว ๆ นี้)  Zend ได้ปล่อยแยกออกมาต่างหากในชื่อ Zend Debugger หรือ server-debugger โดยปล่อยมาพร้อมกับ PDT (PHP Development Tools) หรือก็คือ IDE ของ PHP ที่ยกความสามารถของ Zend Studio ตัว IDE เสียเงินของ Zend ไปใส่ใน Eclipse IDE นั้นเอง โดยเป็นความร่วมมือของ Zend กับ Eclipse นั้นเองครับ โดยเมื่อไม่นานนี้ (ของจริง) Zend ก็ออก Zend Studio for Eclipse ที่เป็น version เสียเงินออกมาในคร่าต่อมาเหมือนกัน แต่ของดี ๆ ก็ยังคงอยู่ครับ โหลดได้ที่ http://downloads.zend.com/pdt/server-debugger/ ครับผม โดยผลจากการที่ปล่อยมาพร้อม ๆ กับ PDT ทำให้ PDT สามารถทำ remote debugging ได้โดยตรงเลย และฟรีด้วย เพราะ PDT เป็นตัว open-source อยู่ครับ หาโหลดได้ในเว็บ zend ลองหา ๆ ดูครับ

โดยวิธีการใช้งาน ผมไม่ขออธิบายดีกว่า ดู VDO เอาแทนน่าจะเข้าใจง่ายกว่ามั้งครับ ;P

eclipse php debugging with zend debugger

Eclipse PDT and Zend Debuger in action

PHP Debugger

ตั้งค่า Zend Optimizer กับ Zend Debugger ให้ทำงานพร้อมกันได้

หลายคนที่ทำงานด้าน Web Dev ที่พัฒนาบน PHP มักจะต้องใช้ Zend Debugger ไม่มากก็น้อย โดยเอาไว้ใช้ในการ Debug แบบ Realtime ในระหว่างที่ PHP กำลังทำงานอยู่ เพื่อเก็บรายละเอียดด้าน Performance ต่าง ๆ ที่ เช่น

  • php ไฟล์ที่เราเขียนอยู่มีการ access พวก include หรือ require ไฟล์ต่าง ๆ กี่ไฟล์
  • มีการเรียกใช้ object, class, method หรือ function อะไรบ้าง ไล่เรียงตาม flow ต่าง ๆ
  • ตรวจสอบว่า method หรือ function ในแต่ละตัวนั้นทำงานนานแค่ไหน เพื่อเช็ด และตรวจสอบด้านความเร็วในการทำงาน
  • เช็คพวก warning, strict, notice message ระหว่างการทำงานโดยไม่ต้องเขียน error_reporting ให้เขียนไฟล์ให้เสียเวลาทำงาน

ส่วน Zend Optimizer นี่ผมใส่ลงไปเพื่อเพิ่มความเร็วในการทำงานของ PHP เวลาทำงาน แต่มัน debug ไม่ได้ครับ แต่ทำให้ script ของเราทำงานเร็วขึ้น 10 – 30% ตามที่ Zend ได้บอกไว้ในเว็บ (แต่มันก็เร็วขึ้นจริง ๆ แหละ)

โดยทั้งสองตัวนี้มีวิธีการลงที่คล้าย ๆ กัน (เรื่องวิธีการลงหาได้ทั่วไปตาม internet ทั้ง Debugger กับ Optimizer ไม่ขออธิบายแล้วกัน) ถ้าไปสืบหาตามปกติ การตั้งค่าจะทับซ้อนกันครับ ทำให้ต้องเลือกอย่างใดอย่างหนึ่งตอนใช้งาน แต่ว่าก็มีหนทางทำให้มันทำงานได้เหมือนกันครับ

โดยเราตั้งค่าพื้นฐานโดยใช้ Optimizer ยืนพื้นไปก่อนเลย โดยชื่อไฟล์ต่าง ๆ ที่บอกมาเป็นตัว library ที่ทำงานบน Windows ครับ

  1. [Zend]
  2. zend_extension_ts="c:/path_to_zend_optimizer/lib/ZendExtensionManager.dll"
  3. zend_extension_manager.optimizer_ts="c:/path_to_zend_optimizer/lib/Optimizer"

โดยใน c:/path_to_zend_optimizer/lib/Optimizer นั้น จะมี directory เรียงรายตาม version ต่าง ๆ ของ php ครับ โดยผมใช้ PHP 5.2.6 ครับ ก็จะใช้ directory php-5.2.x ครับ ในนั้นก็จะมีไฟล์ชื่อ ZendOptimizer.dll (ไฟล์ที่อ้างอิงคือ Windows นะครับ)

ให้เอาไฟล์ ZendDebugger.dll ที่โหลดมาจากเว็บ zend เอามาใส่ โดยเอาไฟล์จาก directory ใน .zip ไฟล์ใส่ให้ตรงกับ version ใน directory ปลายทางด้วย

แล้วตั้งค่า ต่อไปด้วยคำสั่ง

  1. [Zend]
  2. zend_extension_ts="c:/path_to_zend_optimizer/lib/ZendExtensionManager.dll"
  3. zend_extension_manager.optimizer_ts="c:/path_to_zend_optimizer/lib/Optimizer"
  4.  
  5. [Debugger]
  6. zend_extension_manager.debug_server_ts="c:/path_to_zend_optimizer/lib/Optimizer"
  7. zend_debugger.allow_hosts=127.0.0.1/32
  8. zend_debugger.allow_tunnel=127.0.0.1/32
  9. zend_debugger.expose_remotely=allowed_hosts
  10. zend_debugger.connector_port=10001

แล้ว restart ตัว Web Server ก็จะสามารถทำให้ Zend Optimizer กับ Zend Debugger ทำงานได้พร้อม ๆ กันแล้วหล่ะครับ

โดย phpinfo แล้วจะได้ตามวงสี่เหลี่ยมสีแดงนี้ครับ

2008-05-19_211436

อ้างอิงจาก How to allow Zend Optimizer and Zend Debugger coexist