Thứ Tư, 6 tháng 6, 2012

TỔNG HỢP SỬ DỤNG XDEBUG VÀ NEATBEAN GỠ LỖI


Cấu hình XDebug trên NetBeans và cách sử dụng FirePHP

Viết lúc 13:59 ngày 16/04/2010 bởi Administrator .
Lâu rồi không xuất bản bài hướng dẫn lào ! hôm lay dù công việc hơi bị nhiều nhưng thỏa theo ước nguyện của bác Về Đâu, nên phải đành đoạn dành chút thời gian viết bài hướng dẫn cách cấu hình X-Debug và sử dụng FirePHP.

X-Debug là gì ?

Đọc cái tên nghe là biết nó là cái gì rồi !? X-Debug dùng để kiểm tra lỗi ứng dụng PHP của bạn, còn muốn hiểu hơn về nó nữa thì vào đây đọc tiếp
Cấu hình XDebug trên NetBeans và cách sử dụng FirePHP

Cấu hình X-Debug ?

Để cấu hình X-Debug, điều đầu tiên bạn cần là download file DLL mới nhất tại XDebug website. Tốt nhất bạn nên sài phiên bản 2.x dành cho PHP phiên bảng 5.2.x. Khi tớ viết bài này thì tớ sài bảng php_xdebug-2.0.5-5.2.
Chỉnh sửa PHP.INI tại path-to-webserver/apache/bin/   Lưu ý là bạn nên sửa PHP.INI trong apache/bin và không nên sửa tại path-to-webserver/php/. Đây là sai lầm lớn nhất của mọi người và cả người thực hiện bài viết này 
Thêm dòng mã sau vào cuối của file PHP.INI
Text plainCopy to clipboard
?
  1. zend_extension_ts = path-to-webserver/php5/xdebug/php_xdebug-2.0.5-5.2.dll
  2. xdebug.remote_enable=1
  3. xdebug.remote_handler=dbgp
  4. xdebug.remote_mode=req
  5. xdebug.remote_host=127.0.0.1
  6. xdebug.remote_port=9001
Tiếp theo, tăng bộ nhớ PHP lên 128M (mặc định là 8M ^^! nếu tớ không lầm).  Lưu PHP.INI và restart lại WebServer, vào đường dẫn http://localhost/phpinfo.php và nhìn hình dưới đây, nếu phpinfo của bạn giống thế thì bạn đã install thành công rồi.
Cấu hình XDebug trên NetBeans và cách sử dụng FirePHP
Để chạy ứng dụng, bạn vào NetBeans và nhấn vào nút như hình đầu tiên.  chúc bạn thành công.

Cách sử dụng FirePHP

Ở bài viết trước, tớ đã có giới thiệu một tý về FirePHP, các bạn có thể tìm đọc lại ở đây: Tìm hiểu về firebug. Nhiều người sau khi cài Extension FirePHP cho FireBug xong thì chả biết cách sử dụng nó như thế nào !? thế là reinstall hoặc để đó cho nó "oách" , vì thế ở bài viết này, tớ sẽ hướng dẫn các bạn cách sử dụng nó một cách hiệu quả nhất có thể.
Điều đầu tiên, bạn cần cài đặt FirePHP (đối với các bạn chưa cài FirePHP thì vào đây), tiếp theo để có thể sài được FirePHP thì bạn download Thư viên FirePHPCore ở đây.
Sau khi download xong thì extract và tạo cấu trúc như trong hình dưới:
Cấu hình XDebug trên NetBeans và cách sử dụng FirePHP
hix viết 1 lúc quên lưu, thế là lại viết lại  không hiểu mình bị gì nữa :|
Ok, tiếp tục bài viết, bạn để ý hình ở trên, sau khi extract chúng ta được 5 file, trong đó file LICENSE thì bạn khỏi quan tâm (chả bao giờ tớ xem cái này  ). FirePHP cung cấp cho bạn đầy đủ nhất có thể, ở đây nó còn support cho bạn cả PHP 4 (chả ghiền cái này) và 2 loại API cho bạn sử dụng ?! nó là gì ? hehe  nó là Object Oriented API và Procedural API. Nếu ứng dụng của bạn viết theo chuẩn OOP thì bạn nên sử dụng Object Oriented API, còn ngược lại thìProcedural API.
Tạo một file index.php trong thư mục FirePHP và .... continued

Object Oriented API

Text plainCopy to clipboard
?
  1. require_once('FirePHPCore/FirePHP.class.php');
  2. $firephp = FirePHP::getInstance(true);
  3. $firephp-> *
  4.  
  5. require_once('FirePHPCore/fb.php');
  6. FB:: *
  7.  
  8. $firephp->setEnabled(false);  // or FB::
  9.  
  10. FB::send(/* See fb() */);

Procedural API

Text plainCopy to clipboard
?
  1. require_once('FirePHPCore/fb.php');
  2.  
  3. fb($var)
  4. fb($var'Label')
  5. fb($var, FirePHP:)
  6. fb($var'Label', FirePHP:)

Chức năng của FirePHP

Bắt đầu tìm hiểu về cách chức năng của FirePHPCore nhé 

Cấu hình & Object Filters

Text plainCopy to clipboard
?
  1. <?php
  2. ob_start();
  3.  
  4. // Defaults:
  5. $options = array(
  6.     'maxObjectDepth' => 10,
  7.     'maxArrayDepth' => 20,
  8.     'useNativeJsonEncode' => true,
  9.     'includeLineNumbers' => true
  10. );
  11.  
  12. // Object Oriented API
  13. require_once('FirePHPCore/FirePHP.class.php');
  14. $firephp = FirePHP::getInstance(true);
  15.  
  16. // cấu hình
  17. $firephp->getOptions();
  18. $firephp->setOptions($options);
  19. // Object Filters
  20. $firephp->setObjectFilter('ClassName'array('MemberName'));
  21.  
  22. // Procedural API
  23. require_once('FirePHPCore/fb.php');
  24.  
  25. // cấu hình
  26. FB::getOptions($options);
  27. FB::setOptions($options);
  28. // Object Filters
  29. $firephp->setObjectFilter('ClassName'array('MemberName'));

Error, Exception & Assertion Handling

Gởi tất cả các thông báo lỗi (E_WARNING, E_NOTICE, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE và E_RECOVERABLE_ERROR)cho FireBug để hiển thị. Thêm dòng mã sau vào cuối file index.php
Text plainCopy to clipboard
?
  1. // Error, Exception & Assertion Handling
  2. $firephp->registerErrorHandler($throwErrorExceptions=true);
  3. $firephp->registerExceptionHandler();
  4. $firephp->registerAssertionHandler( $convertAssertionErrorsToExceptions=true$throwAssertionExceptions=false);
  5. try {
  6.     throw new Exception('Test Exception');
  7. catch(Exception $e) {
  8.     $firephp->error("Object Oriented API : {$e}");
  9.     FB::error("Procedural API : {$e}");
  10. }
Nhìn kết quả ở hình dưới:
Cấu hình XDebug  trên NetBeans và cách sử dụng FirePHP

Groups

Trong một vài trường hợp, có lẽ bạn sẽ cần đến Groups, nó dùng để gọp tất cả các Exception lại thành một và dễ quản lý. Copy đoạn mã sau và cho vào cuối của file index.php
Text plainCopy to clipboard
?
  1. // Groups
  2. $firephp->group('Test Group');
  3. $firephp->log('Hello World');
  4. $firephp->log('Hello Ken Phan Blog');
  5. $firephp->groupEnd();
  6.  
  7. $firephp->group('Collapsed and Colored Group',
  8.     array(
  9.         'Collapsed' => true,
  10.         'Color' => '#FF00FF'
  11.     )
  12. );
Kết quả:
Cấu hình XDebug  trên NetBeans và
cách sử dụng FirePHP

Logging Messages

Có 4 loại methods cho việc hiển thị logging message.
Text plainCopy to clipboard
?
  1. // Priority Styling
  2. $firephp->log('Plain Message'); // or FB::
  3. FB::log('Info Message');        // or $firephp->
  4. $firephp->warn('Warn Message'); // or FB::
  5. FB::error('Error Message');     // or $firephp->
Kết quả:
Cấu hình XDebug  trên NetBeans và
cách sử dụng FirePHP

Table

FirePHP còn hổ trợ bạn sử dụng bảng nữa đó  thật là thú vị phải không !? dữ liệu của bạn sẽ được sắp sếp rất đẹp và rất tiện cho việc debug ứng dụng. Nếu bạn đang sử dụng fb() thì bạn cần phải dùng constant FirePHP::TABLE.
Text plainCopy to clipboard
?
  1. // Table
  2. $table   = array();
  3. $table[] = array('Col 1 Heading','Col 2 Heading');
  4. $table[] = array('Row 1 Col 1','Row 1 Col 2');
  5. $table[] = array('Row 2 Col 1','Row 2 Col 2');
  6. $table[] = array('Row 3 Col 1','Row 3 Col 2');
  7.  
  8. $firephp->table('Table Label'$table); // or FB::
  9. fb($table'Table Label', FirePHP::TABLE);
Kết quả:
Cấu
hình XDebug  trên NetBeans và
cách sử dụng FirePHP
 ... còn tiếp



SỬ DỤNG XDEBUG VÀ NEATBEAN GỠ LỖI


Sữ dụng xDebug và Neatbean gỡ lỗi
Trong lập trình việc gỡ lỗi là việc không thể tránh khỏi, đối với các dự án nhỏ chúng ta có thể hình dung ra logic là tìm lỗi dễ dàng. Tuy nhiên, với các project lớn, hay các framework, CMS lớn để tìm lỗi không dễ đặc biệt là lỗi logic.
Để dễ dàng trong việc phát hiên các lỗi logic chúng ta sẽ dung chức năng debug của PHP kết hợp với IDE Netbean.
B1: Mở chức năng debug

-          Để sữ dụng được chức năng debug bạn chọn gói ứng dụng nào có hổ trợ xDebug, cụ thể mình chọn wamp
B2: Cài đặt và cấu hình
-          Cài Netbean và tạo một project mới
-          Click phải lên tên project chọ properties, chọn mục run configuration






Điền đầy đủ thông tin bao gồm đường dẫn thực thi, file chạy mặc định và các tham số nếu có.

B3: Tạo điểm ngừng(break point)
-          Vào một file mà bạn chắc rằng khi thực thi code thì file này và dòng lệnh mà bạn chọn được gọi.





Click vào số thứ tự dòng để ra kết quả như hình là ok.
B3: Khởi động debug
-          Nhắp vào biểu tượng trên Netbean

Sau khi debug được khỏi động, bạn hãy chạy liên kết mà có chứa breakpoint lựa chọn bên trên.
Nếu dòng bạn đặt breakpoint được thực thi nó sẽ có màu xanh và Apache sẽ dừng lại tại đó chờ bạn điều khiển.



-          Bạn sẽ điều khiển Apache như sau:
F8: chạy qua dòng code tiếp theo, chạy qua hàm được gọi
F7: đi vào lệnh đang được gọi(ví dụ đi vào hàm đang được tô xanh)
F5: hủy lệnh debug tức thời để Apache chạy bình thường
-          Trong khi chạy Neatbean sẽ ghi lại các biến, các đối tượng để chúng ta theo dõi, bật của sổ như sau(chọnVariables):














Các biến liệt kê bao gồm tên biến/ kiểu dữ liệu/ giá trị, các bạn có thể xem để biết mình sai chổ nào:




Để tắt debug các bạn nhấn



Chúc các bạn thành công.

1 nhận xét: