2013-07-22 52 views
5

Tôi đã theo dõi Rafael Dohms's article để sử dụng các công cụ gỡ lỗi NetBeans cho các thử nghiệm phpunit.Gỡ lỗi NetBeans không hoạt động cho các thử nghiệm phpunit

Vấn đề là khi tôi bắt đầu gỡ lỗi trong NetBeans và chạy thử nghiệm bằng cách sử dụng dòng lệnh, NetBeans chuyển từ trạng thái "chờ kết nối" sang "netbeans-xdebug runnig". Nhưng chương trình dừng lại ở dòng lệnh sau khi "cofiguration read from ..." và cũng không có hành động gỡ lỗi nào (Step over, Step into etc) đang hoạt động.

Tôi đã cố tắt tùy chọn "Dừng ở dòng đầu tiên" và cũng có thể sử dụng tệp gỡ lỗi để gỡ lỗi, nhưng không có tệp nào trong số đó hoạt động.

Tôi có bỏ lỡ điều gì đó về cấu hình hoặc sử dụng các công cụ NetBeans không?

cập nhật

Tôi cố gắng để khắc phục vấn đề sử dụng NetBeans nhưng nó đã không làm việc. cuối cùng tôi đã sử dụng PhpStrom để gỡ lỗi mã, mặc dù tôi có cùng một kết quả, tôi thành công để gỡ lỗi chương trình CLI bình thường và cũng theo dõi chương trình thử nghiệm phpunit của tôi. Tôi nhận ra rằng gỡ lỗi đóng băng trong "lê \ PHPUnit \ util \ PHP.php" tập tin, trong dòng sau:

$stdout = stream_get_contents($pipes[1]); 

Tôi đang sử dụng Windows 7 và php-v5.3

+0

Bạn có thể gỡ lỗi khi thực hiện một số PHP từ dòng lệnh? Bởi vì thực sự đó là những gì Netbeans làm. – qrazi

+0

Kết quả tương tự; ngoại trừ thời gian này tập tin được thực thi hoàn toàn, nhưng không bao giờ dừng lại ở bất kỳ điểm ngắt nào –

+0

Bạn đang sử dụng hệ điều hành nào? Gỡ lỗi hoạt động trong trình duyệt? – qrazi

Trả lời

0

Bạn cần phải đã cài đặt Xdebug trên Webserver, thường lắng nghe trên cổng 9000.

Kiểm tra bài blog này như thế nào để cấu hình Xdebug http://bogdan-albei.blogspot.co.uk/2010/06/php-remote-debugging-with-xdebug-and.html

Từ những gì bạn đã viết có vẻ như với tôi rằng Xdebug không hoạt động.

+0

Như tôi đã đề cập trong bản cập nhật, có vẻ như xdebug hoạt động tốt –

+0

Tôi gặp sự cố khi chạy xdebug trên cổng 9000, vì vậy tôi đã chuyển sang cổng 9003 và sau đó nó hoạt động tốt. Ngoài ra cli và máy chủ web có thể đang sử dụng các tệp php.ini khác nhau. –

0

Hãy chắc chắn rằng bạn có thiết lập debug là cả apache2 và cli php.ini

tôi thêm các mục sau đây vào cả những tập tin này

/etc/php5/cli/php.ini

/etc/php5/apache2/php.ini

[xdebug] 
zend_extension = /usr/lib/php5/20090626/xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_host=127.0.0.1 
xdebug.remote_port=9000 
0

vấn đề có thể sử dụng nghiêm ngặt chế độ trong phpunit, ví dụ: trong phpunit.xml.

Do cài đặt này dừng tại điểm ngắt kích hoạt thời gian chờ. Nếu không có chế độ nghiêm ngặt, thời gian chờ không hoạt động.

0

Tôi gặp sự cố tương tự và không tìm thấy giải pháp chính xác nào nhưng bây giờ tôi gỡ lỗi các trường hợp thử nghiệm của mình. Tôi hy vọng điều này "làm thế nào để" ngắn gọn cũng sẽ hữu ích cho bạn.

Khi bạn gỡ lỗi trong trình duyệt, chỉ có sự khác biệt trong các superglobals $ _SERVER, trước hết bạn cần điều này.

Chỉ cần ném một ngoại lệ trong trường hợp thử nghiệm của bạn cho examle:

throw new Exception(json_encode($_SERVER));

Nếu mọi thứ đều ok sau đó bạn sẽ thấy một cái gì đó như thế này trong thông báo lỗi thử nghiệm của bạn:

{"ALLUSERSPROFILE":"C:\ProgramData","APPDATA":"C:\User......

tạo một tệp (ví dụ: "phpunit-debug._SERVER.json") và sao chép toàn bộ dòng json đầy đủ vào tệp này.

thứ hai, bạn phải thực hiện một "phpunit-debug.php" tập tin với nội dung này:

$_SERVER = (array) json_decode(file_get_contents("phpunit-debug._SERVER.json")); // include your bootstrap if it's necessary... include 'c:\xampp\php\phpunit'; // TADAA! your PHPUnit tricked and believe // that you called by NetBeans ;) but can // debugging with xdebug as usually

3

Tìm thấy bài này khi tìm kiếm dòng

$stdout = stream_get_contents($pipes[1]); 

kết hợp với từ khóa xdebug và phpunit.

Tôi gặp khó khăn với các triệu chứng như nhau, phpstorm (không bao giờ thử netbeans) cuối cùng đã dẫn tôi đến dòng này bị trì hoãn.

Trong bước tới dòng này, tôi nhận thấy một số đề cập về 'cách ly quá trình', làm cho tôi bỏ tham số -process-isolation trong cuộc gọi xdebug của tôi (chính chúng ta sử dụng để giải quyết rò rỉ bộ nhớ). Bây giờ dòng viết tắt không được gọi, và hoạt động xdebug/unittest continiue's

Không tuyên bố đây là giải pháp, nhưng ít nhất là giải pháp khả thi cho tôi. Ngoài ra có thể đưa ra một số hướng để thực sự vấn đề/giải pháp

+0

Bạn đã làm cách nào để loại bỏ thông số cách ly quá trình? – jorgetutor

+0

iirc nó chỉ là một tham số CLI trong một hướng dẫn sử dụng CLI phpunit với xdebug chạy .. Ommitting tham số là một vấn đề chỉ cần không gõ nó;) Tôi nghĩ rằng quá trình cô lập cũng có thể là một thiết lập một nơi nào đó trong phpunit.xml nhưng tôi đã không dùng nó. – ArjanW

0

Có lẽ mọi thứ đã thay đổi, nhưng tôi không thể bắt đầu kết nối từ thiết bị đầu cuối khi chạy phpunit với Netbeans 8.1 sau khi thử từng câu trả lời trước đây. Tốt nhất là nó sẽ nói trong bảng điều khiển nb, chạy ... xong. Không bao giờ chờ kết nối.

Điều gì đã hiệu quả đối với tôi là bắt đầu từ Netbeans.

Dưới đây là một số hướng dẫn đã hoạt động với tôi trên Ubuntu 16.04giả sử php và netbeans đã được cài đặt và đang hoạt động.

  1. Cài đặt tiện ích Xdebug

    sudo apt install php-xdebug 
    
  2. Enable nó

    sudo phpenmod xdebug 
    
  3. Thêm biến môi trường để php.ini hoặc /etc/php/7.0/cli/conf.d/20-xdebug.ini

    zend_extension=xdebug.so 
    xdebug.idekey=netbeans-xdebug 
    xdebug.remote_enable= On 
    xdebug.remote_handler=dbgp 
    xdebug.remote_mode=req 
    xdebug.remote_host=127.0.0.1 
    xdebug.remote_port=9000 
    
  4. tôi yêu cầu phpunit trong dự án của tôi như một sự phụ thuộc composer dev, do đó thực thi tọa lạc tại vendor/bin/phpunit và đây là tập tin để thiết lập như là "File Index"

  5. tôi sử dụng một phpunit.xml configuration file để đặt tùy chọn và thử nghiệm các bộ trong thư mục gốc của dự án của tôi. Vì vậy, bạn cần phải thiết lập vị trí đó thư mục như "Working Directory" để nó nhặt của bạn bootstrap, vv

screenshot netbeans project properties