fre*_*dev 8 php macos web-applications xdebug eclipse-pdt
我正在尝试远程调试一个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"
Run Code Online (Sandbox Code Playgroud)
这是我的Eclipse 4.2.1调试配置:

Xdebug已正确安装,我在phpinfo()输出中看到它已启用.
我试图调试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
Run Code Online (Sandbox Code Playgroud)
然后跟踪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 ...]
Run Code Online (Sandbox Code Playgroud)
在这里,我抓住了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
Run Code Online (Sandbox Code Playgroud)
看着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'
Run Code Online (Sandbox Code Playgroud)