Mac OS X で何が起こっているのかを理解するために、Eclipse をデバッグしようとしました。
まず、現在実行中の 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'