Итак, eclipse и xdebug заходят в бар, а затем умирает мой сервер apache.

Я использую windows xp x86, wamp, apache2, php 5.3 x86, eclipse php и xdebug, работающие на локальном хосте как виртуальный хост, так и виртуальный хост https.

информация о версии eclipse
Версия Eclipse для разработчиков PHP: Идентификатор сборки выпуска Helios: 20100617-1415

Каким-то образом мне удалось настроить eclipse и xdebug, и все было хорошо.

Затем мне пришлось сделать ветку svn моего проекта и перенастроить apache с двумя новыми виртуальными хостами и обновить файлы хостов Windows.

Теперь, когда я запускаю режим отладки в eclipse, все умирает.

В частности, если я не устанавливаю точки останова, приложение работает нормально, за исключением проблемы, которую я пытаюсь отладить в первую очередь.

Если я устанавливаю точку останова, приложение останавливается в точке останова, и eclipse, кажется, держит мяч. Но теперь, когда я нажимаю «Продолжить», «перехожу», «вхожу» или «чихаю», eclipse сообщает, что выполнение возобновилось, но приложение продолжает зависать, и мне нужно перезапустить apache.

Я подозреваю, что в связи между eclipse и xdebug есть некоторый разрыв, потому что мне кажется, что eclipse отправляет мою команду продолжения или перехода, но xdebug не получает ее.

Но даже если это так, я не знаю, что с этим делать. Где я должен искать?

Обновление:
Мне удалось выполнить отладку с помощью notepad++, его подключаемого модуля xdebug и, как пещерный человек, ввести &XDEBUG_SESSION_START=session_name в URL-адрес. Однако, несмотря на мою любовь к npp, его отладочный плагин довольно глючный...

Итак, я заметил в stackoverflow рекламу чего-то под названием «phpstorm», которое позиционировалось как легковесный, но полнофункциональный php ide с встроенной поддержкой xdebug. Демонстрация потребовала перезагрузки, чтобы заставить ее работать, и это похоже на работу с шаткой черновой таблицей, но ей удалось очень хорошо отладить как мое маленькое тестовое приложение, так и реальное приложение, чего я не могу сказать о eclipse в момент, хотя это, вероятно, моя вина.

Я, вероятно, должен был опубликовать это раньше:/ Вот мой раздел phpinfo() xdebug

xdebug
xdebug support  enabled
Version     2.1.0

Supported protocols Revision
DBGp - Common DeBuGger Protocol     $Revision: 1.145 $

Directive   Local Value Master Value
xdebug.auto_trace   Off Off
xdebug.collect_assignments  Off Off
xdebug.collect_includes On  On
xdebug.collect_params   0   0
xdebug.collect_return   Off Off
xdebug.collect_vars Off Off
xdebug.default_enable   On  On
xdebug.dump.COOKIE  no value    no value
xdebug.dump.ENV no value    no value
xdebug.dump.FILES   no value    no value
xdebug.dump.GET no value    no value
xdebug.dump.POST    no value    no value
xdebug.dump.REQUEST no value    no value
xdebug.dump.SERVER  no value    no value
xdebug.dump.SESSION no value    no value
xdebug.dump_globals On  On
xdebug.dump_once    On  On
xdebug.dump_undefined   Off Off
xdebug.extended_info    On  On
xdebug.file_link_format no value    no value
xdebug.idekey   no value    no value
xdebug.manual_url   http://www.php.net  http://www.php.net
xdebug.max_nesting_level    100 100
xdebug.overload_var_dump    On  On
xdebug.profiler_aggregate   Off Off
xdebug.profiler_append  Off Off
xdebug.profiler_enable  Off Off
xdebug.profiler_enable_trigger  Off Off
xdebug.profiler_output_dir  C:\xampp\tmp    C:\xampp\tmp
xdebug.profiler_output_name xdebug_profile.%p   xdebug_profile.%p
xdebug.remote_autostart Off Off
xdebug.remote_connect_back  Off Off
xdebug.remote_cookie_expire_time    3600    3600
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  localhost   localhost
xdebug.remote_log   c:\xampp\apache\logs\xdebug.log c:\xampp\apache\logs\xdebug.log
xdebug.remote_mode  req req
xdebug.remote_port  9000    9000
xdebug.scream   Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars  Off Off
xdebug.show_mem_delta   Off Off
xdebug.trace_format 0   0
xdebug.trace_options    0   0
xdebug.trace_output_dir C:\xampp\tmp    C:\xampp\tmp
xdebug.trace_output_name    trace.%c    trace.%c
xdebug.var_displ

 ay_max_children    128 128
 xdebug.var_display_max_data    512 512
 xdebug.var_display_max_depth   3   3

Вот файл журнала xdebug, когда я воспроизвожу проблему

Log opened at 2011-01-03 08:56:22
-> <init xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
fileuri="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
language="PHP" protocol_version="1.0"
appid="4404"
idekey="ECLIPSE_DBGP"><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>

<- feature_set -i 33 -n show_hidden -v
1
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_set"
transaction_id="33"
feature="show_hidden"
success="1"></response>

<- feature_set -i 34 -n max_depth -v 3
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_set"
transaction_id="34"
feature="max_depth"
success="1"></response>

<- feature_set -i 35 -n max_children
-v 31
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_set"
transaction_id="35"
feature="max_children"
success="1"></response>

<- feature_get -i 36 -n encoding
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_get"
transaction_id="36"
feature_name="encoding"
supported="1"><![CDATA[iso-8859-1]]></response>

<- feature_get -i 37 -n supports_async
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="feature_get"
transaction_id="37"
feature_name="supports_async"
supported="1"><![CDATA[0]]></response>

<- stdout -i 38 -c 1
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stdout" transaction_id="38"
success="1"></response>

<- stderr -i 39 -c 1
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stderr" transaction_id="39"
success="0"></response>

<- breakpoint_set -i 40 -t line -f
file:///C:%5Cxampp%5Chtdocs%5Clab%5Czf-tutorial%5Cpublic%5Cindex.php
-n 21
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="breakpoint_set"
transaction_id="40"
id="44040001"></response>

<- run -i 41
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="run" transaction_id="41"
status="break"
reason="ok"><xdebug:message
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></xdebug:message></response>

<- stack_get -i 42
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stack_get"
transaction_id="42"><stack
where="{main}" level="0" type="file"
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></stack></response>

<- stack_get -i 43
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="stack_get"
transaction_id="43"><stack
where="{main}" level="0" type="file"
filename="file:///C:/xampp/htdocs/lab/zf-tutorial/public/index.php"
lineno="21"></stack></response>

<- eval -i 44 --
JHRoaXMtPmZpZWxkc1snYm9vbF9jb21wbGV0ZSdd
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="44"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 45 --
JHRoaXMtPnN0YWdlLT5nZXQoJ2Jvb2xfY29tcGxldGUnKQ==
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="45"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 46 --
JHRoaXMtPmZpZWxkc1snYm9vbF9jb21wbGV0ZSdd
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="46"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

<- eval -i 47 --
JHRoaXMtPnN0YWdlLT5nZXQoJ2Jvb2xfY29tcGxldGUnKQ==
-> <response xmlns="urn:debugger_protocol_v1"
xmlns:xdebug="http://xdebug.org/dbgp/xdebug"
command="eval"
transaction_id="47"><property
address="92404284"
type="bool"><![CDATA[-1]]></property></response>

=== breakpoint reached, execution pauses.  In eclipse I click "step
over"

<- step_over -i 48

=== end of log

person Matt    schedule 22.12.2010    source источник
comment
Я не могу помочь, но у меня была аналогичная проблема с xdebug, вызывающим сбой eclipse/возобновление случайным образом. Это все еще происходит время от времени, но я не уверен, почему. Мне будет интересно увидеть ответ. О, и +1 за освежающий юмор :D   -  person Craige    schedule 22.12.2010
comment
+1 за заголовок, и если кто-то его отредактирует, дайте мне знать, и я верну его для вас (или верну его ;) ) ~~~ Что касается фактической проблемы, idk, но похоже, что вы знаете, где разрыв (между eclipse и xdebug) ... Я не использую eclipse/apache, поэтому не могу вам помочь, но желаю вам удачи.   -  person jcolebrand    schedule 22.12.2010
comment
1. Мне не нравится PHPStorm. Я нашел его неуклюжим и непригодным для использования. 2. Используете ли вы 32-битную или 64-битную версию Eclipse и какую версию? 32-битный или 64-битный PHP и какой версии?   -  person Craige    schedule 22.12.2010
comment
Я предполагаю, что вы пытались сбросить настройки PHP/XDebug по умолчанию и настроить с нуля? Если вы это сделаете, то, по крайней мере, вы сможете понять, что это не ваша конфигурация XDebug, которая вызывает проблему. Затем попробуйте сбросить настройки хоста Apache и добавить ТОЛЬКО свою активную программу в качестве виртуального хоста, отладить свою программу, а затем добавить другие позже (зависит от того, сколько других вещей у вас запущено, относительно того, возможно ли увеличить время простоя, пока вы делаете это). В том же духе попробуйте создать новый проект Eclipse, привязанный к вашей программе, и запустите его в режиме отладки, чтобы проверить, соответствуют ли настройки Eclipse.   -  person    schedule 23.12.2010
comment
Я абсолютно не знаю, как вам помочь, но я люблю вопросы, которые сочетаются с хорошим юмором (конечно, с реальным вопросом). солидарный +1   -  person Trufa    schedule 23.12.2010
comment
@ darvids0n Это было в моем списке того, что нужно попробовать. Поскольку я заставил его работать с двумя разными клиентами отладки, отличными от eclipse, я склонен думать, что настройки моего сервера верны.   -  person Matt    schedule 23.12.2010
comment
Раньше у xdebug были проблемы с расширением curl PHP в Windows. Если он у вас включен, попробуйте отключить его, чтобы увидеть, поможет ли это.   -  person Mchl    schedule 23.12.2010


Ответы (4)


Эта статья звучит многообещающе.

Судя по всему, и XDebug, и Eclipse (в своей среде php dev) могут использовать протокол DBGp. Основываясь на этой статье, вы можете заставить все работать, возясь с файлом [s] .htaccess Apache или запустив прокси-сервер DBGp (что бы это ни было). Подробности в статье.

Я подозреваю, что и XDebug, и Eclipse подключаются к одному и тому же сеансу отладки PHP, наступая друг другу на пятки, вызывая Hilarity Ensue.

Это или "неопределенное поведение". Так или иначе.

person Mark Storer    schedule 28.12.2010
comment
Разве xdebug и ide не должны подключаться к одному и тому же сеансу отладки? Если нет, есть ли простой способ проверить, так ли это? Я не думаю, что это проблема с несколькими клиентами, так как я могу подключаться к другим отладчикам. - person Matt; 29.12.2010
comment
Я догадываюсь. Чтобы быть уверенным, попробуйте отключить отладку PHP в Eclipse. Также возможно, что Apache использует аналогичные механизмы отладки для PHP и любых других отладок eclipse, и эти две вещи запутываются. PS: это плагин XDebug в eclipse или отдельное приложение? Похоже, что есть плагин XDebug, но если вы его не используете, проблема может быть в нем. - person Mark Storer; 29.12.2010

ууууууууууу

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312951#c8

Создание нового рабочего пространства позволяет мне успешно выполнять отладку.

На данный момент я могу предположить, что это вызвало два проекта в одной рабочей области с разными виртуальными хостами на одном и том же IP-адресе.

Так что я больше не буду этого делать.

person Matt    schedule 05.01.2011
comment
Итак, как именно это работает? У вас есть отдельные папки в корневом каталоге веб-сайта, которые вы используете в качестве рабочих пространств? Кажется, я не могу заставить это решить мою проблему. - person thaddeusmt; 07.01.2011
comment
Каждое веб-приложение имеет свой собственный корневой каталог, который настроен как виртуальный хост Apache. Я создал новую рабочую область eclipse, затем новый проект, создал из существующего источника и выбрал корневой каталог конкретного приложения. - person Matt; 10.01.2011

Это может показаться глупым вопросом, и я извиняюсь, если это так, но вы создали новый PHP-сервер внутри вашей конфигурации отладки Eclipse, который сопоставляется с вашим новым виртуальным хостом?

Каждый раз, когда я создаю новый виртуальный хост, я обычно создаю совершенно новую конфигурацию отладки и новый PHP-сервер в этой конфигурации, который сопоставляется с виртуальным хостом, чтобы я мог легко выбрать его из раскрывающегося списка конфигураций отладки. при запуске новой сессии.

Для тех, кому интересно, я делаю это, перейдя в «Выполнить» -> «Конфигурации отладки ...», выберите «Веб-страница PHP» в меню слева, нажмите «Создать +» (или продублируйте, если он у меня уже есть), а затем под Вкладка «Сервер», где написано «PHP Server», я нажимаю «Создать», а затем ввожу URL-адрес виртуального хоста для корня документа.

person Michael Henretty    schedule 04.01.2011
comment
Не глупо, но да, я сделал это. У меня есть виртуальный хост как для фактического рабочего приложения, так и виртуальный хост для моей лаборатории/песочницы, конфигурации отладки для каждого, и у меня одна и та же проблема с каждым - person Matt; 05.01.2011

На данный момент я могу предположить, что это вызвало два проекта в одной рабочей области с разными виртуальными хостами на одном и том же IP-адресе.

Ну, я также отлаживаю два проекта в одной и той же рабочей области Eclipse с разными VHosts на одном и том же IP и использую apache.

И я не испытываю ваших проблем.

Хотя мой apache и прочее находятся в vmware-эмуляции debian, а мой Eclipse находится в WinXP.

Лучший

Рафаэль

person Raffael    schedule 04.02.2011
comment
хм, в этом случае, возможно, это также может быть связано с тем, что оба виртуальных хоста, которые я отлаживал, находились на моем 127.0.0.1. - person Matt; 07.02.2011
comment
А апач не жаловался на это? хм... не знаю - person Raffael; 07.02.2011