我尝试调试 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 现在找到了它正在寻找的文件,并且调试器终于正确启动了。它甚至问我是否想切换到调试视角。
结论
如果你遇到这个奇怪的错误:“没有找到合适的文件或没有选择文件。 ”,那么这就是写的内容。好的,我的 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'