Ответ 1
Из того, что вы описываете, удаленная отладка xdebug работает.
Почему HTML возвращается в браузер (а не то, что вы ожидаете), сказать сложно. Вы пробовали использовать стабильную версию xdebug?
Прежде всего, у вас есть информация о xdebug:
Xdebug installed: 2.2.0rc1
Server API: Apache 2.4 Handler Apache Lounge
Windows: yes - Compiler: MS VC9 - Architecture: x86
Zend Server: no
PHP Version: 5.4.0
Zend API nr: 220100525
PHP API nr: 20100525
Debug Build: no
Thread Safe Build: yes
Configuration File Path: C:\Windows
Configuration File: C:\Uniserver\UniServer\usr\local\php\php.ini
Extensions directory: C:\Uniserver\UniServer\usr\local\php\extensions
You're already running the latest Xdebug version
Все выглядит отлично. Вот как выглядит мой php.ini:
[Xdebug]
zend_extension=C:\Uniserver\UniServer\usr\local\php\extensions\php_xdebug-2.2.0RC1-5.4-vc9.dll
xdebug.remote_host=localhost
xdebug.remote_port=9123
xdebug.idekey=PHPSTORM
xdebug.remote_mode=req
xdebug.remote_handler=dbgp
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_autostart=0
xdebug.remote_log="C:\Uniserver\UniServer\usr\local\php\extensions\tmp\log.log"
xdebug.overload_var_dump=1
xdebug.trace_format=0
xdebug.show_exception_trace=0
xdebug.default_enable=0
Теперь я попытаюсь отладить с PhpStorm. Сначала я перехожу в Настройки- > PHP- > Серверы и добавляю следующее:
Name: localhost
Host: localhost
Port: 8080
Debugger: Xdebug
(Да, мой сайт работает на порту 8080, в противном случае я получаю конфликты с другим программным обеспечением, которое я использую.) Затем я создаю новую конфигурацию Run/Debug:
PHP Remote Debug
Name: local
Servers: localhost
Ide key(session id): PHPSTORM
Я также создаю закладку отладки запуска/остановки с помощью этого инструмента: http://www.jetbrains.com/phpstorm/marklets/index.html
Хорошо, все выглядит готово, поэтому я нажал кнопку "Отладка" в PhpStorm.
Домашняя страница моего проекта находится в http://localhost:8080/Project/page/Home.php, поэтому я перемещаюсь туда. Страница загружается. Я нажимаю кнопку "Пуск" на панели "Закладки", перезагружается, и страница остается пустой...
Когда я добавляю точку останова в файле home.php в моем проекте и снова загружаю, точка останова попадает! Я могу перешагнуть, вступить... Все значения отображаются. Это работает без каких-либо проблем. Но когда я просмотрел все точки останова или нажал "Возобновить программу" и вернул браузер, страница полностью пуста. Код HTML выглядит следующим образом:
<html><head><style type="text/css"></style></head><body></body></html>
Что происходит? Почему страница, которую я отлаживаю, не обрабатывается? Выполняя работу над кодом, все php и html выполняются, но в конце ничего не отображается в моем браузере. Я планирую использовать Xdebugger для функции, которая находится в файле /Project/class/Account.php, но я не могу туда попасть, не нажимая кнопку на моей домашней странице.
Почему бы вам не использовать прокси-сервер Xdebug, который вы говорите? Может ли это решить что-нибудь? Ну, когда я пытаюсь установить его, я получаю эту ошибку:
Xdebug proxy: не удается подключиться к прокси-серверу xdebug на 'localhost: 9123'
Даже если моя конфигурация прокси-сервера Xdebug верна:
IDE key: PHPSTORM
Host: localhost
Port: 9123
Кто-нибудь может рассказать мне, что происходит? Мне действительно нужен этот отладчик, потому что по какой-то причине есть определенная функция, которая по какой-то причине не будет работать, и это сводит меня с ума. Мне нужно проверить, какие переменные передаются и что происходит с ними.
ИЗМЕНИТЬ
Дополнительная информация: Когда я закончил работу над всем кодом, мой отладчик говорит:
Waiting for incoming connection with ide key 'PHPSTORM'
Возможно, это причина, по которой моя страница не загружается?
ИЗМЕНИТЬ EDIT
Хорошо, вместо того, чтобы нажимать кнопку отладки, я могу просто начать прослушивать PHP Debug Connections. Это тоже работает! Мои контрольные точки попали, я могу войти... Но та же проблема сохраняется: Моя веб-страница остается пустой, и мой отладчик говорит "Отключен" в конце. Проблема сохраняется в любом браузере.
ИЗМЕНИТЬ EDIT EDIT EDIT
Я обнаружил что-то еще очень странное при отладке... Я могу просто вставить свой код, пока не нажму на функцию, которая получает мой экземпляр базы данных. Класс Database выглядит следующим образом:
class Database
{
private static $instance = null;
private static $conn;
private function __construct()
{
try {
self::$conn = new mysqli('localhost', 'root', 'root', 'database', '3308');
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
}
}
public static function getInstance()
{
try {
if (self::$instance == null) {
self::$instance = new Database();
}
return self::$instance;
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
return false;
}
}
public function query($sql)
{
try {
return self::$conn->query($sql);
} catch (Exception $ex) {
$errorpager = new CustomPageGenerator();
$errorpager->generateErrorPage("Connection to database failed. Please try again later.");
return false;
}
}
}
Мне кажется, что мой класс базы данных может иметь какое-то отношение к этой проблеме... Каждый раз, когда я нажимаю на функцию getInstance(), отладка прерывается резко, и я получаю ошибку net:: ERR_CONNECTION_RESET в Google Chrome. Может ли это быть проблемой?
Из того, что вы описываете, удаленная отладка xdebug работает.
Почему HTML возвращается в браузер (а не то, что вы ожидаете), сказать сложно. Вы пробовали использовать стабильную версию xdebug?
Проблема устранена в Xdebug 2.2.0RC2. Пожалуйста, обновите.
Я обновился до php_xdebug-2.2.1-5.4-vc9.dll, и это решило проблему
В моем случае это было потому, что xdebug прослушивал только порт ipv6, и браузер пытался подключиться через ipv4 (localhost).
Я не уверен, что это зависит от того, привязан ли сервер отладки к порту ipv4 или ipv6. В моем случае это с Ubuntu 12.04 и php из репозитория Ubuntu по умолчанию.
Вы можете проверить, есть ли у вас такая же проблема, запустив
sudo netstat -tulpen
в то время как phpstorm ожидает соединения. Найдите запись для порта 9000 (или независимо от того, что вы настроили). В моем случае вывод затем содержит строку
tcp6 0 0 :::9000 :::* LISTEN 1000 6687897 318/java
Это можно решить, изменив настройки ядра, но я решил просто подключиться к этому порту ipv6: В конфигурации phpstorm run/debug, используемой для этого проекта, в настройках сервера я изменил Host с "localhost" на "ip6-localhost". В Ubuntu, что ipv6-аналог (:: 1) localhost (127.0.0.1) по умолчанию настроен в /etc/hosts. Опять же, я не уверен, что это относится и к другим операционным системам.