我正在尝试远程调试一个php web应用程序,但是当我尝试启动一个调试会话时,Eclipse会给我一些弹出窗口:
调试器错误:“找不到合适的文件或没有选择文件。调试已终止”。
这是我目前的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调试配置:
Xdebug已正确安装,我在phpinfo()输出中看到它已启用。
答案 0 :(得分:6)
我尝试调试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
启动调试会话。
我的eclipse项目中不存在文件pear-ini.php
。
所以我在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'
答案 1 :(得分:3)
我遇到了同样的问题,虽然freedev的回答指出了我正确的方向,但实际上并没有解决它。
使用dtruss没有帮助:我没有在任何地方看到XML <init>
元素。但是,一旦我在xdebug.remote_log=/tmp/xdebug.log
中设置php.ini
,然后在尝试启动远程调试会话时将/tmp/xdebug.log
文件挂起,我就能找到它。再次提到/opt/local/var/db/php5/pear/pear-ini.php
。但我在我的文件系统中该文件,所以我不知道为什么我仍然得到关于文件丢失的这个模糊的错误消息。
但是,现在我知道 Pear参与了这个问题,我尝试简单地卸载Pear(sudo port uninstall php53-pear
),因为我实际上不再使用它了。而且,看哪,修好了!我不再收到“No appropriate file”错误消息,我可以像平常一样进行调试。
卸载php53-pear后,该XML数据中的fileuri
设置现在是我一直尝试调试的Drupal站点的index.php
文件。所以我认为您应该期望Web请求的入口点文件出现在该XML <init>
元素中。我希望我知道为什么Pear安装了fileuri
属性的更改。能够配置Pear以停止搞乱Xdebug会比卸载Pear要好得多。
答案 2 :(得分:1)
我遇到了同样的问题,原因不是上面提到的pear.ini
或pear-ini.php
。
原因很简单。我在Eclipse环境中安装了PDT和Aptana PHP插件。只需将项目类型和调试配置类型切换到PDT的,一切正常。
感谢您发布一个好的帖子。 :)
答案 3 :(得分:0)
我正在使用Linux并使用strace附加Eclipse进程(当然是真正的Java子进程)我无法捕获这些错误。
对于那些遇到相同问题但在解决问题时不成功的人,如果您不久前完成了Eclipse或PDT更新,请尝试删除您的项目并重新创建它。它解决了我的问题,即xdebug调试和Eclipse项目清理没有。
答案 4 :(得分:0)
如果您的调试器曾经工作过,但突然之间它开始抛出该消息,那么您可能只是将源文件加入书签,Eclipse不会将其视为项目的一部分或者根本无法找到它。
例如,当我调试我为Wordpress编写的插件时,我已将一些外部Wordpress文件加入书签,似乎Eclipse / Xdebug无法访问/定位。删除该书签后,一切都恢复正常。
如果是这种情况,则只需删除所有书签。