Първо, имайте информация за 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
Добре, всичко изглежда готово, така че натиснах бутона Debug в PhpStorm.
Началната страница на моя проект се намира на http://localhost:8080/Project/page/Home.php, така че навигирам там. Страницата се зарежда. Натискам бутона за стартиране в лентата с отметки, презареждам и страницата остава празна...
Когато добавя точка на прекъсване към файла home.php в моя проект и презаредя отново, точката на прекъсване се достига! Мога да прекрача, да пристъпвам... Всички стойности се показват... Това работи без проблем. Но когато преминах през всички точки на прекъсване или натиснах Resume Program и върнах браузъра, страницата беше напълно празна. HTML кодът изглежда така:
<html><head><style type="text/css"></style></head><body></body></html>
Какво става? Защо страницата, която отстранявам грешки, не се изобразява? Преминаването през кода работи, всички php и html се изпълняват, но в крайна сметка нищо не се показва в моя браузър. Планирам да използвам Xdebugger за функция, която се намира във файл /Project/class/Account.php, но не мога да отида там, без да натисна бутон на началната си страница.
Защо не използвате Xdebug прокси, казвате? Може ли това да реши нещо? Е, когато се опитам да настроя такъв, получавам тази грешка:
Xdebug прокси: Не може да се свърже с xdebug прокси на 'localhost:9123'
Въпреки че моята Xdebug прокси конфигурация е правилна:
IDE key: PHPSTORM
Host: localhost
Port: 9123
Може ли някой да ми каже какво става? Наистина имам нужда от този дебъгер, защото има определена функция, която не работи правилно по някаква причина и това ме подлудява. Трябва да проверя какви променливи се предават и какво се случва с тях.
РЕДАКТИРАНЕ
Допълнителна информация: Когато приключа с преминаването на целия код, моят дебъгер казва:
Waiting for incoming connection with ide key 'PHPSTORM'
Възможно ли е това да е причината страницата ми да не се зарежда?
РЕДАКТИРАНЕ РЕДАКТИРАНЕ
Добре, вместо да натискам бутона за отстраняване на грешки, мога също така просто да започна да слушам PHP Debug Connections. Това също работи! Моите точки на прекъсване са достигнати, мога да вляза в... Но същият проблем продължава: Моята уеб страница остава празна и моята програма за отстраняване на грешки казва „Прекъсната връзка“ в края. Проблемът продължава във всеки браузър.
РЕДАКТИРАНЕ РЕДАКТИРАНЕ
Открих нещо друго, което е много странно по време на отстраняването на грешки... Мога да навляза добре в кода си, докато не натисна функцията, която получава екземпляра на моята база данни. Класът 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. Възможно ли е това да е проблемът?
PHPSTORM
в моя php.ini файл и рестартирането на apache е това, което го поправи за нулева конфигурация за отстраняване на грешки в уеб браузъра. - person racl101   schedule 25.03.2013