Kiểm tra xem xdebug có hoạt động không


81

Không cần cài đặt texteditor hoặc IDE, có thể kiểm tra xem xdebug có hoạt động hay không, tức là nếu nó có thể gỡ lỗi mã php?

Phần duy nhất xdebug xuất hiện trong phpinfo () là phần sau:

Các tệp .ini bổ sung được phân tích cú pháp /etc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc/php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini

Nó không được đề cập trong phpinfo () ở bất kỳ nơi nào khác.


7
phpinfo()báo cáo nó như là một phần mở rộng tải? Đó có phải là những gì bạn có nghĩa là "làm việc"?
Wiseguy

2
Nếu nó được hiển thị trên trên phpinfo () của bạn có thể thử telnet trên cổng Xdebugs (đó là 9000 theo mặc định)
tix3

@Wiseguy, tôi đã cập nhật câu hỏi. Điều đó có nghĩa là nó được tải / hoạt động bình thường không?
oshirowanen

@ tix3, tôi đã cập nhật câu hỏi. Điều đó có nghĩa là nó được tải / hoạt động bình thường không?
oshirowanen

2
Nếu tiện ích mở rộng thực sự được tải, nó phải có phần riêng liệt kê các chỉ thị cấu hình của nó.
Wiseguy

Câu trả lời:


91

Nếu không thực sự thực hiện một số gỡ lỗi, tôi đoán bạn không thể chắc chắn rằng một trình gỡ lỗi đang hoạt động.

Nhưng bạn có thể khá chắc chắn - tôi đoán người ta nên giả định rằng nếu một số khía cạnh của xDebug đang hoạt động thì tất cả sẽ hoạt động.

Do đó, bạn có thể xác nhận rằng xDebug đã được cài đặt và tại chỗ bằng cách thử các bước sau:

1) phpinfo()- điều này sẽ hiển thị cho bạn tất cả các tiện ích mở rộng được tải, bao gồm cả xDebug. Nếu nó ở đó, thì đó là một đặt cược an toàn rằng nó đang hoạt động.

2) Nếu điều đó không đủ tốt cho bạn, bạn có thể thử sử dụng var_dump()chức năng này. xDebug sửa đổi đầu ra của var_dump()để bao gồm thông tin bổ sung. Nếu điều này đúng, thì xDebug đang hoạt động.

3) xDebug sửa đổi đầu ra lỗi của PHP. Nếu chương trình của bạn gặp sự cố với xDebug tại chỗ, bạn sẽ nhận được nhiều thông tin về lỗi hơn là với đầu ra lỗi PHP tiêu chuẩn.

4) xDebug cũng thêm một số hàm trợ giúp vào PHP. Bạn có thể thử bất kỳ cách nào trong số này để xem nó có hoạt động không. Ví dụ, hàm xdebug_get_code_coverage()nên tồn tại và trả về một mảng. Nếu có, thì xDebug đã được cài đặt. Nếu không, nó không phải là.


1
phpinfo () chỉ đề cập đến xdebug trong Additional .ini files parsed. Kiểm tra phần còn lại của đề xuất của bạn bây giờ.
oshirowanen

3
Chỉ cần cố gắng xdebug_get_code_coverage()và tôi nhận được Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5.
oshirowanen

7
đủ công bằng. Điều đó khá chắc chắn cho bạn biết rằng xdebug không được cài đặt đúng cách.
Spudley 27/12/12

3
Chỉ là FYI nếu trường hợp đó xảy ra thì bạn nên mở /etc/php/conf.d/xdebug.initệp của mình , tệp này được đề cập trong các tệp .ini bổ sung được phân tích cú pháp và bỏ ghi chú tất cả các dòng trong đó. zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
Tony Morello

@TonyMorello Tôi nghĩ điều đó đã giúp tôi, vì php.ini của tôi đã được thiết lập đúng với đường dẫn đầy đủ, nhưng trong Debian cũng có một /mods-availablethư mục và cài đặt xdebug.ini đó xung đột (tôi nghĩ) với cài đặt php.ini của tôi.
PJ Brunet

67

Chạy

php -m -c

trong thiết bị đầu cuối của bạn, và sau đó tìm kiếm [Zend Modules]. Nó sẽ ở đâu đó nếu nó được tải!

NB

Nếu bạn đang sử dụng Ubuntu, nó có thể không hiển thị ở đây vì bạn cần thêm cài đặt xdebug từ /etc/php5/apache2/php.inivào /etc/php5/cli/php.ini. Tôi là

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

17
php --versioncũng liệt kê với Xdebug nếu tải của nó
mfink

1
@mfink php --versionkhông phù hợp với tôi. Ngay sau khi khởi động máy của tôi, sau khi Apache được khởi động và hoạt động, php --versionhiển thị Xdebug, nhưng phpinfo()không hiển thị phần xdebug. Và việc thực thi tập lệnh PHP không dừng lại ở các điểm ngắt. Sau khi tôi chạy service apache2 restart, phpinfo()hiển thị phần xdebug và công việc gỡ lỗi. Vì vậy, vì một số lý do, xdebug không được tải khi Apache khởi động trong quá trình khởi động máy. Vì vậy, bây giờ tôi phải khởi động lại Apache sau mỗi lần khởi động.
Buttle Butkus

35

Hãy thử như sau, sẽ trả về "tồn tại" hoặc "không tồn tại":

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';

25

Sau một thời gian dài gần 24 giờ khó khăn để cố gắng làm cho xdebug hoạt động với Netbeans 8.0.2, tôi đã tìm thấy một giải pháp mà tôi hy vọng sẽ hoạt động cho tất cả các ngăn xếp liên quan đến Ubuntu và Ubuntu.

Vấn đề số 1: Phiên bản PHP và xdebug phải tương thích

Đôi khi, nếu bạn đang chạy thiết lập Linux và apt-get để cài đặt xdebug, nó sẽ không giúp bạn có được phiên bản xdebug thích hợp. Trong trường hợp của tôi, tôi có phiên bản php mới nhất nhưng là phiên bản xdebug cũ. Đó phải là do phiên bản Xubuntu hiện tại của tôi. Các phiên bản phần mềm phụ thuộc vào kho lưu trữ, phụ thuộc vào phiên bản hệ điều hành bạn đang chạy.

Giải pháp: PHP có một trình quản lý mở rộng gọn gàng được gọi là PECL. Làm theo các hướng dẫn được cung cấp ở đây để thiết lập và chạy nó. Đầu tiên, như được chỉ ra bởi một thành viên ở phần nhận xét, bạn nên cài đặt gói nhà phát triển của PHP để PECL hoạt động:

sudo apt-get install php5-dev

Sau đó, sử dụng PECL, bạn sẽ có thể cài đặt phiên bản ổn định mới nhất của xdebug:

sudo pecl install php5-xdebug

Sau khi bạn thực hiện, phiên bản xdebug thích hợp sẽ được cài đặt nhưng chưa sẵn sàng để sử dụng. Sau đó, bạn sẽ cần phải kích hoạt nó. Tôi đã thấy nhiều gợi ý về cách làm điều đó, nhưng thực tế của vấn đề là PHP cần một số mô-đun để được kích hoạt cho cả máy khách và máy chủ, trong trường hợp này là Apache. Có vẻ như cách tốt nhất ở đây là sử dụng phương pháp kích hoạt mô-đun được tích hợp sẵn, được gọi là php5enmod. Cách sử dụng được mô tả ở đây .

Vấn đề số 2: Kích hoạt đúng mô-đun

Đầu tiên, bạn cần vào bên trong thư mục / etc / php5. Trong đó, bạn sẽ tìm thấy 3 thư mục, apache2, cli và mods_available. Thư mục mods_available chứa các tệp văn bản với các hướng dẫn để kích hoạt một mô-đun nhất định. Quy ước tên là [module] .ini. Hãy xem bên trong một vài trong số chúng, xem chúng được thiết lập như thế nào.

Bây giờ bạn sẽ phải tạo tệp ini của mình bên trong thư mục mods_available. Tạo một tệp có tên xdebug.ini và bên trong tệp, dán đoạn này:

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

Đảm bảo rằng chỉ thị [xdebug] có mặt, chính xác như ví dụ trên. Nó là bắt buộc để mô-đun hoạt động. Trên thực tế, chỉ cần sao chép và dán toàn bộ mã, bạn sẽ trở thành một người hạnh phúc hơn theo cách đó. : D

Lưu ý: đường dẫn zend_extension rất quan trọng. Trong ví dụ này, nó đang trỏ đến phiên bản hiện tại của PHP engine, nhưng trước tiên bạn nên truy cập / usr / lib / php5 và đảm bảo rằng thư mục được đặt tên bằng số là đúng. Điều chỉnh tên thành bất cứ thứ gì bạn nhìn thấy ở đó và khi đang ở đó, hãy kiểm tra bên trong thư mục để đảm bảo xdebug.so thực sự ở đó. Nó nên được, nếu bạn đã làm mọi thứ đúng.

Bây giờ, với xdebug.ini của bạn đã được tạo, đã đến lúc kích hoạt mô-đun. Để làm điều đó, hãy mở một bảng điều khiển và nhập:

php5enmod xdebug

Nếu mọi thứ suôn sẻ, PHP đã tạo hai liên kết đến tệp này, một liên kết bên trong /etc/php5/apache2/conf.d và một liên kết bên trong /etc/php5/cli/conf.d

Khởi động lại máy chủ Apache của bạn và nhập vào bảng điều khiển:

php -v

Bạn sẽ nhận được một cái gì đó như thế này:

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

Điều đó có nghĩa là ứng dụng khách PHP đã đọc tệp xdebug.ini của bạn và tải mô-đun xdebug.so. Càng xa càng tốt.

Bây giờ, hãy tạo một tập lệnh phpinfo ở đâu đó trên máy chủ web của bạn và chạy nó. Đây là những gì bạn sẽ thấy, nếu mọi thứ diễn ra suôn sẻ:

nhập mô tả hình ảnh ở đây

Nếu bạn thấy điều này, Apache cũng đã tải mô-đun và bạn có thể đã sẵn sàng. Bây giờ chúng ta hãy xem liệu Netbeans sẽ gỡ lỗi chính xác. Tạo một tập lệnh rất đơn giản, thêm một số biến, cung cấp giá trị cho chúng và đặt điểm ngắt trên chúng. Bây giờ nhấn CTRL + F5, nhấp vào "bước vào" trên bảng điều khiển trình gỡ lỗi của bạn và xem liệu bạn có nhận được thứ gì đó như sau không:

xdebug đang hoạt động

Hãy nhớ kiểm tra cấu hình Netbeans để gỡ lỗi, trong công cụ / tùy chọn / php. Nó sẽ trông giống như sau:

Gỡ lỗi cấu hình trên Netbeans

Tôi hy vọng điều này làm sáng tỏ vấn đề khá mù mờ, khó hiểu này.

Lời chúc tốt nhất!


2
làm việc cho tôi, câu trả lời này nên được trên Xdebug hoặc netbeans trang web lẽ
Southerton

1
Tôi đã phải cài đặt gói nhà phát triển PHP để có được PECL làm việc: sudo apt-get install php5-dev.
đến

Ngoài ra, php5enmodkhông tạo bất kỳ liên kết nào trong các tệp ini, nó hoạt động gọn gàng mà không cần.
đến

1
Một điều nữa: [xdebug]Chỉ thị trong tệp ini là rất quan trọng để làm cho nó hoạt động. Tôi bối rối bởi thực tế là, trong tệp ini ban đầu, tệp [xdebug]bị thiếu, nhưng đối với tôi, nó không hoạt động nếu không có.
đến

Xin chào! Bạn nói đúng về việc cài đặt gói nhà phát triển của PHP, tôi sẽ cập nhật bài đăng cho phù hợp. Không chắc chắn về nhận xét của bạn trên php5enmod bạn. Nó tạo ra các liên kết trên các thư mục mà tôi đã chỉ định. Và vâng, lệnh [xdebug] là bắt buộc, tôi cũng sẽ cập nhật bài đăng để phản ánh điều đó. Cảm ơn vì bạn đã phản hồi!
Théo T. Carranza

9

Chỉ để mở rộng câu trả lời của KsaR và cung cấp khả năng kiểm tra xdebug từ dòng lệnh:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"

6

bạn có thể chạy phpmã nhỏ này

<?php
phpinfo();
?>

Sao chép toàn bộ trang đầu ra, dán nó vào liên kết này . Sau đó phân tích. Nó sẽ hiển thị nếu Xdebug được cài đặt hay không. Và nó sẽ đưa ra hướng dẫn để hoàn tất cài đặt.


3

Nếu bạn đang sử dụng Eclipse thì hãy lưu ý rằng trong khi chạy ở chế độ XDebug, hằng số ma thuật __FILE__ sẽ luôn được đánh giá là:

xdebug://debug-eval

Vì vậy, kiểm tra sau sẽ trả về true nếu phiên của bạn ở dưới XDebug:

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug

2

trong câu hỏi của bạn, bạn đã đề cập rằng phpinfo của bạn nói rằng apache đang tải cấu hình của xdebug trong /etc/php5/apache2/conf.d/xdebug.ini Trong nhiều hướng dẫn trực tuyến, bạn có thể lưu ý rằng họ yêu cầu bạn đặt cấu hình xdebug trong php .ini (và đó là những gì tôi đã làm) TUY NHIÊN, nếu cấu hình được đặt thành /etc/php5/apache2/conf.d/xdebug.ini, thì bạn nên xóa cài đặt cấu hình [XDebug] khỏi / etc / php5 / apache2 /php.ini và đặt nó vào /etc/php5/apache2/conf.d/xdebug.ini INSTEAD. Sau khi tôi xóa khỏi /etc/php5/apache2/php.ini và đặt vào /etc/php5/apache2/conf.d/xdebug.ini và khởi động lại apache, nó đã hoạt động !!

Do đó, trong /etc/php5/apache2/conf.d/xdebug.ini của bạn, hãy đặt như sau:

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

sau đó xóa nó khỏi /etc/php5/apache2/php.ini nếu bạn cũng đặt nó ở đó.

Sau đó làm:

khởi động lại dịch vụ sudo apache2

Sau đó, nó sẽ hoạt động !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.