2013-02-28 4 views
8

Я пытаюсь отлаживать удаленно с PHP веб-приложение, но в любое время я пытаюсь начать сеанс отладки Eclipse, затопить меня с кучей всплывающих окон:XDebug PHP Eclipse, - не об ошибках Нет соответствующий файл, расположенный или нет выбранного файла

Ошибка отладчика: «Не выбран нужный файл или не выбран файл. Отладка завершена».

enter image description here

Это мой текущий Xdebug 2.2.1 Конфигурация:

[xdebug] 
xdebug.remote_enable=1 
xdebug.remote_autostart=0 
xdebug.remote_host="localhost" 
xdebug.remote_port=9000 
xdebug.remote_handler="dbgp" 

Это мой Eclipse, 4.2.1 конфигурации отладки:

enter image description here

Xdebug установлен правильно, Я вижу, что он включен в phpinfo().

ответ

7

Я пытался отладки Eclipse, для того, чтобы понять, что происходит в моем Mac OS X.
сначала найти текущий процесс Eclipse, выполнив команду:

$ ps -ef | grep eclipse 
    501 15160 373 0 4:21PM ??   2:57.19 /Users/myuser/apps/eclipse/Eclipse.app/Contents/MacOS/eclipse -psn_0_651423 

Затем проследить систему Eclipse, называет:

$ sudo dtruss -fp 15160 

[... omissis ...] 
accept(0xA0, 0x1224C37E8, 0x1224C37E4)  = 103 0 
setsockopt(0x67, 0xFFFF, 0x1002)  = 0 0 
setsockopt(0x67, 0xFFFF, 0x1001)  = 0 0 
read(0x67, "4\0", 0x1)  = 1 0 
read(0x67, "7\0", 0x1)  = 1 0 
read(0x67, "7\0", 0x1)  = 1 0 
read(0x67, "\0", 0x1)  = 1 0 
read(0x67, "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<init xmlns=\"urn:debugger_protocol_v1\" xmlns:xdebug=\"http://xdebug.org/dbgp/xdebug\" fileuri=\"file:///opt/local/var/db/php5/pear/pear-ini.php\" language=\"PHP\" protocol_version=\"1.0\" appid=\"14961\" idekey=\"ECLIPSE_DB", 0x1DD)   = 477 0 
read(0x67, "\0", 0x1)  = 1 0 
[... omissis ...] 

Здесь я поймал первую строку, отправленную из xdebug.
Это линия, где eclipse читает фрагмент XML. Я полагаю, что это часть DBGp.

<?xml version="1.0" 
     encoding="iso-8859-1"?> 
<init xmlns="urn:debugger_protocol_v1" 
     xmlns:xdebug="http://xdebug.org/dbgp/xdebug" 
     fileuri="file:///opt/local/var/db/php5/pear/pear-ini.php" 
     language="PHP" 
     protocol_version="1.0" 
     appid="14961" 
     idekey="ECLIPSE_DB 

Глядя на fileuri я обнаружил Xdebug пытается начать сеанс отладки с /opt/local/var/db/php5/pear/pear-ini.php. Файл pear-ini.php не существует в моих проектах eclipse.

Так я создал новый проект в моей Eclipse, рабочее пространство и здесь я скопировал файл /opt/local/var/db/php5/pear/pear-ini.php

Он работает, Eclipse PDT Теперь нашел файл, который он искал, и отладчик, наконец, начать правильно. Он даже спрашивает меня, хочу ли я переключиться на перспективу Debug.

Заключение
Если вы столкнетесь с этой странной ошибкой: «Нет соответствующий файл находится или не выбран файл», а это означает именно то, что написано. Хорошо, мой Eclipse не смог найти файл, но это также означало, что он пытается найти файл, который вышел из его рабочей области. Может быть, файл, который загружается из PHP-движка по какой-то странной причине. В моем случае pear-ini.php добавляется автоматически pear.ini

$ cat pear.ini 
; Do not edit this file; it is automatically generated by MacPorts. 
; Any changes you make will be lost if you upgrade or uninstall php5-pear. 
; To configure PHP, edit /opt/local/etc/php5/php.ini. 
auto_prepend_file = '/opt/local/var/db/php5/pear/pear-ini.php' 
+2

+1 для приятного выкапывания, ваши усилия были оценены. – SparKot

+0

Спасибо :) Сообщение об ошибке было действительно раздражающим, даже потому, что оно не объясняло точно, что случилось. – freedev

+0

Комментарий удален: найдено решение. Большое вам спасибо за сообщение! –

0

Я использую Linux и прикрепление Eclipse, используя процесс Трассирования (реальный Java подпроцесс, конечно) я не смог поймать такие ошибки.

Для тех, кто испытывает ту же проблему, но не подходит для решения проблемы, и если вы недавно сделали обновление Eclipse или PDT, попытайтесь удалить проект и заново создать его.Он решил мою проблему, когда отладка xdebug и очистка проекта Eclipse не выполнялись.

1

Я встретил такую ​​же проблему, и причина не была pear.ini или pear-ini.php как упомянуто выше.

Причина была настолько простой. Я установил как PDT, так и Aptana PHP Plugin в среду Eclipse. Просто , переключая оба типа проекта и тип конфигурации отладки на PDT, все работало нормально.

Благодарим за сообщение хорошей темы. :)

3

У меня была эта же проблема, и хотя ответ Свобоева указал мне в правильном направлении, на самом деле это не решило.

Использование dtruss не помогло: я не видел, чтобы XML <init> элемент нигде. Но я смог найти его, как только установил xdebug.remote_log=/tmp/xdebug.log в php.ini, а затем обработал файл /tmp/xdebug.log, когда попытался запустить сеанс удаленной отладки. Вновь упоминалось сообщение /opt/local/var/db/php5/pear/pear-ini.php. Но у меня есть этот файл в моей файловой системе, поэтому я понятия не имею, почему я все еще получаю это неопределенное сообщение об отсутствии файла.

Однако теперь, когда я знал, что Груша был вовлечен в проблему, я попытался просто удалить груши (sudo port uninstall php53-pear), так как я не был на самом деле использовать его больше. И вот, вот, это исправлено! Я больше не получаю сообщение об ошибке «Нет соответствующего файла», и я могу отлаживать, как обычно.

С удаленной установкой php53-груша параметр fileuri в данных XML теперь является файлом index.php для сайта Drupal, который я пытался отлаживать. Поэтому я думаю, что вы должны ожидать, что файл точки входа для ваших веб-запросов появится в этом элементе XML <init>. Мне жаль, что я не знал, почему Pear установил изменения, что атрибут fileuri. Возможность настроить Pear для прекращения беспорядка с Xdebug будет намного лучше, чем удаление Pear.

+2

Спасибо за предложение 'debug.remote_log', это более простое и чистое решение. Кстати, я не уверен, что вы это понимаете: вы должны создать новый проект Eclipse и скопировать pear-ini.php. Другими словами, только когда pear-ini.php находится внутри проекта Eclipse, вы должны иметь возможность отлаживать без этого раздражающего всплывающего окна. – freedev

+0

Это действительно просто хак, который случается, чтобы работать. Что здесь происходит, так это то, что груша каким-то образом ввергается в точку входа Xdebug. Реальное решение было бы переконфигурировать Грушу, чтобы прекратить это делать. Мне просто жаль, что я не знал, как это сделать. – CoreDumpError

0

Если ваш отладчик работал, но затем он начал бросать это сообщение, возможно, вы только что отметили исходный файл, который Eclipse не считает его частью проекта или не может найти его вообще.

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

Если это так, просто удалите все закладки.