2010-07-20 21 views
5

Tôi đã cài đặt Xdebug 2.1 và chạy với PHP 5.2.13. Nó có thể kết nối thành công với nhiều máy khách DBGP (tức là xdebug.remote_log hiển thị liên lạc qua lại và bản thân các khách hàng cũng hiển thị kết nối đến), nhưng nó không dừng lại ở các điểm ngắt. Tôi đã thử NetBeans, MacGDBp và cũng là dòng lệnh debugclient đi kèm với Xdebug.Xdebug kết nối thành công với máy khách DBGP, nhưng sẽ không dừng lại ở điểm ngắt

Một trao đổi điển hình trông giống như:

Log opened at 2010-07-20 09:33:17 
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/hgfs/htdocs/mycompany/index.php" language="PHP" protocol_version="1.0" appid="14371" idekey="macgdbp"><engine version="2.1.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2010 by Derick Rethans]]></copyright></init> 

<- status -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="starting" reason="ok"></response> 

<- step_into -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="macgdbp" status="stopping" reason="ok"></response> 

<- status -i macgdbp 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="macgdbp" status="stopping" reason="ok"></response> 

Log closed at 2010-07-20 09:33:18 

NetBeans cố gắng để đặt breakpoint, và chúng được công nhận bởi Xdebug:

<- breakpoint_set -i 7 -t line -s enabled -f file:///mnt/hgfs/htdocs/mycompany/index.php -n 9 
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="7" state="enabled" id="139360004"></response> 

Tuy nhiên, Xdebug vẫn từ chối dừng lại!

Trả lời

7

Điều này dường như xảy ra nếu bạn đã tải Xdebug là extension (ví dụ: extension=xdebug.so) trong cấu hình PHP thay vì zend_extension (ví dụ: zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so).

Hãy chắc chắn rằng bạn không có một extension=xdebug.so dòng bất cứ nơi nào trong chương trình PHP cấu hình, ngay cả khi bạn đang khá chắc chắn rằng bạn đang sử dụng zend_extension. Ví dụ: nếu bạn có zend_extension trong /etc/php5/conf.d/xdebug.ini, điều này có thể được thay thế bằng một số extension trong /etc/php5/apache2/php.ini. Nếu trường hợp này xảy ra, không có gì sẽ khiếu nại và phpinfo() sẽ báo cáo một cách thận trọng rằng Xdebug đã được tải! (Xdebug 2.1 không đưa ra một cảnh báo nhỏ ở phpinfo() khi nạp như một phần mở rộng, nhưng các phiên bản trước không làm gì cả.)

+0

Ồ, điều này thực sự đã cứu tôi sau khi nhận được một số hành vi lạ cấu hình gỡ lỗi từ xa với MacGDBP. Tôi có thể thấy rằng các kết nối đã thành công trong xdebug.remote_log, và máy khách đã nhận được các kết nối, nhưng các kết nối nhanh chóng bị loại bỏ. Không có đầu ra nào trong máy khách. Đã thay đổi "extension = xdebug.so" khi bạn đề xuất và phát triển mọi thứ hoạt động tốt đẹp. – milesw

+0

Bạn đã làm ngày của tôi. Nếu tôi có thể, tôi sẽ upvote một ngàn lần. – Bgi

0

Bạn phải thêm đường dẫn đầy đủ đến tập tin xdebug.so, ngay cả khi nó được đặt trong thư mục php/modules/, như zend_extension không có trong thư mục này theo mặc định.

Nếu bạn có đường dây exension=xdebug.so, xdebug sẽ tải nhưng sẽ không dừng lại ở điểm ngắt (đánh bại tôi tại sao).

Xóa tất cả exension=xdeabug.so (ngay cả từ tệp cli ini, cũng tải) và thêm zend_extension sẽ giải quyết vấn đề.

+0

điều này chỉ lặp lại tất cả mọi thứ được nói bởi @ mjs ... Một câu trả lời cho một câu hỏi mà là 2 tuổi nên được tốt hơn này. –

+0

Tôi đã chỉ làm rõ rằng bạn phải sử dụng đường dẫn đầy đủ, ông nói "zend_extension =/usr/lib/php5/20060613 + lfs/xdebug.so" nhưng tôi cho rằng ông đã sử dụng đường dẫn này bởi vì ông đã có một phiên bản biên dịch ở đó hoặc bất cứ điều gì, khi tôi đặt xdebug.so vào thư mục php/modules, tôi đã không đặt đường dẫn đầy đủ (như bạn làm với chỉ thị "mở rộng") và điều đó không có tác dụng. – maxidirienzo

0

Nếu tệp php được đặt vào thư mục liên kết tượng trưng thì XDebug sẽ hoạt động với đường dẫn thư mục nguồn thay vì đường dẫn thư mục symlink!

Vì vậy, để kích hoạt tính năng breakpoint bạn nên cấu hình ánh xạ đường dẫn trong ide của bạn cho các thư mục symlinked và các tập tin

0

Tôi biết rằng điều này đã được trả lời nhưng tôi đi qua cùng một vấn đề chỉ muốn đưa ra câu trả lời của tôi nếu bất cứ ai khác chạy ngang điều này. Tôi vô tình bỏ lỡ một giá trị trường hợp trong đường dẫn của tôi mà vẫn cho phép tôi kết nối và chạy trình gỡ rối nhưng nó sẽ không dừng lại ở điểm ngắt của tôi. Tôi đã không nhận ra nó cho đến nỗi thất vọng nhiều nên tôi chỉ muốn mọi người biết rằng đó cũng là một khả năng.

Các vấn đề liên quan