古い話ですが、pdt+xdebugでのデバッグで、ウォッチ式に存在しない関数(未生成のオブジェクトのメソッドとか)を指定したままデバッグを開始するとエラーで落ちる、という
Xdebugでのデバッグ時のウォッチ式 - Dead Zone
というか
Bug 204673 – Debug breakpoints does not stop (Reported: 2007-09-26 08:46 EDT)
な不都合があったわけですが。
先月リリースされたXdebug 2.1.3で遂にようやくやっとこさ改善されたようです。
>Fixed bug #606/bug #678/bug #688/bug #689/bug #704: crash after using eval on an unparsable, or un-executable statement.
試してみたら、値に"error(s)_during_the_evaluation"とエラーメッセージが表示されるようになってました。
元ネタは例によってPDT Forumの投稿なんですが、バカすぎるのでURLは略(汗
問題は、
「Test Debug」フォルダ下のphpファイルをweb実行しようとしたらFirefoxは起動されるけれども「Object not found」のタブともうひとつ意味不明なタブが開かれてしまう
という話で。
確かに、ブラウザを外部ブラウザ(Firefox)にして、スペースを含むフォルダやファイルを開こうとすると、明らかにスペースで分断されてしまいますね...
Internet Explorerに変えて試してみると、スペースはちゃんと%20になってて、分断されたりしません。(当たり前...)
で。
PDTは、FFだろうがIEだろうが外部ブラウザに生パス(というかスペースはスペースのまま)を渡していて。誰がどこで%20化するのが正しいのかよく分かりません。Firefoxなのかもしれないし、swtのMozillaサポートモジュールなのかもしれないし、あるいはPDT内で予め処理するべきなのか。
とりあえず手入力でスペースを%20に書き換える(LaunchConfigとかを)しかないようです。
[追記]
書き忘れてましたがXdebugでの話です。
[さらに追記]
ZendDebuggerでも同じでした...
で、パッチをこさえてみたらば。
Debugできず(x_x)。%20でブラウザを開いても、debug用のURLがスペースのままだと同一URLとみなされないようで。
なんか面倒くさいので放置決定。
[1/28追記]
というわけで作業部屋のpatchesにpdt_tools.feature_patch.pdt.3.0.0.v20120127.zipをアップロードしました。URLを自動生成する場面(Run As>Web PageとかLaunchConfig編集画面のAuto-generateとか)で、パスに含まれるスペースを%20に変換します。
えっと。sourceforgeのブログの方で要望コメントいただきまして。フォーマッタの新版(ベータ版)を 作業部屋 に上げときました。pdt_tools.formatter_1.4.0.20120119.zip です。
追加したのは「改行」の「関数・メソッドの呼び出し」で、array()文と同様に、関数・メソッド呼び出しの括弧も強制的に改行するものです。
改行後のインデントは「折り返し」の設定に従います。array()文も従来は1インデント固定だったんですが、「折り返し」の設定に従うように変更しました。
また、このバージョンからPDT3.0.1以降にはインストールできないようにしました。
[1/27追記]
面倒くさいので現状のまま1.4.0正式版扱いにしました。
元ネタはこちら
Eclipse Community Forums: PDT ≫ XDebug - Eclipse doesn't switch back to PHP perspective
Xdebugでデバッグすると、デバッグ終了時にPHPパースペクティブに自動的に切り替わる機能が効かない、件なんですが。
だいぶ前に「PDT+JDT環境でJavaのデバッグ終了時にも勝手にPHPパースペクティブに切り替えられてしまう」というバグがありまして。これですね。
Bug 298461 - Switched to the PHP perspective when java app has terminated
このパッチのPHPデバッグかどうかの判定が不適切だったんですねぇ...(Xdebugの場合にPHPデバッグとみなされず、無視されてしまう)
なんだかなぁ...
修正するのは簡単なんですけど。
どうしたもんか...
[追記]
と思ったら、その先の「まだ終了していないデバッグセッションがあればパースペクティブを切り替えない」処理が全部ZendDebugger用になってました。(^^;
こりゃダメだ。
[更に追記]
というわけで本件修正版pdt_tools.feature_patch.pdt.3.0.0.v20120114.zipを作業部屋のpatchesにアップロードしました。
Call Hierarchy View自体はDLTKのものです。PDTに実装されているのは、コンテキストメニューのOpen Call Hierarchyを有効化/無効化する処理と、DLTKのCall Hierarchy Viewを呼び出す処理だけです。
で、DLTKのCall Hierarchy Viewは「Call Hierarchyを探索する処理」を呼び出すんですが、その処理はPDTには実装されていません。
このCall Hierarchy Viewがちょっとバグっぽくて...
Search ScopeをHierarchyにして、メソッドではなく関数(function)を選択してOpen Call Hierarchyすると、NullPointerExceptionが発生してしまいます。
これは、DLTKが初期化処理の中で選択されたメソッド(今の場合関数)の"クラス"を要求するからで、PHPの通常のfunctionの場合当然クラスは存在しませんからクラスを要求されてもNULLしか返せず、DLTKはNULLを想定していないのでエラーと相成ります。
Hierarchy以外の場合、Scopeのトップレベルはフォルダになりますが、Hierarchyの場合、トップレベルはファイルではなくクラスになります(JDTがそうなっているから)。そのため、クラスに属さない関数が存在するPHPでは問題が生じてしまいます。
また、Callee Hierarchyの方で、呼び出しメソッドが他のファイルにある場合、シングルクリックするとそのファイルがオープンされて無関係な箇所が選択されてしまいます。(ダブルクリックすると正常なファイル/箇所が選択されます)
これはJDTと動作が異なるので、DLTKがJDTのコードをコピった時にバグったかと。
他にもありそうな気がします...
元ネタは
Eclipse Community Forums: PDT » 'Open call hierarchy' (Ctrl-Alt-H) doesn't seem to work for me
というか
Bug 346785 – call hierarchy is not work or not implement?
というか
要は、Open Call Hierarchyは実装されてないのかッ、てことらしいですが。
実装されてません。
なぜかCall Hierarchy Viewを表示する部分だけは実装されてるんですが、実処理部分は実装されてません。ZendStudioのWebを見ても、PDTに対するアドバンテージとしてCall Hierarchyは挙げられていないので、ZendStudioにも無いのかもしれませんが。
というわけで。
http://sourceforge.jp/users/atlanto/pf/eclipse/files/?id=565
の、pdt_tools.callHierarchy_0.1.0.20120113.zip
PHPエディタでカーソルがメソッド上にあると、右クリックのコンテキストメニューの「Open Call Hierarchy」が有効になります(メソッド上にない時やメソッドが解決不能な時は無効化されます)。
で、開かれるCall Hierarchy Viewがこちら。
とか
とか。
そのメソッドの定義位置と、そのメソッドを使用しているメソッド(または関数もしくはファイル)がツリー上に表示され、その下にはさらにそのメソッドの使用箇所が連鎖的に表示されます。
ビューの右肩のボタンで「そのメソッドを呼び出しているメソッド」と「そのメソッドが呼び出しているメソッド」を切り替えられます。
検索の対象範囲は、ビュー右上の逆三角形のメニューボタンをクリックしてSearch Scopeを選択すると、Workspace、Project、Hierarchy、Working Setから選べます。
PDT2.2.1(HeliosSR2)〜3.0.0(IndigoSR1)用です。
JDTも同様ですが、対象全ファイルをなめるのでディスクアクセスも処理時間もそれなりに。それなりに。
何が便利なのか私には分かりませんが...
PHP5.4はRC5になり。最終版のリリースがいつなのかは知りませんが。
Eclipseは来月にはIndigo SR2がリリース予定で。
つい最近PDTはCVS上で5.4対応が盛り込まれました。まだアルファ版みたいですが。ひょっとしたらIndigo SR2ではPHP5.4対応の新PDTが…出るんだか出ないんだか(^^;
5.4対応デバッガがまだ無いみたいなので出ないかな…
ということはHeliosリポジトリにバグだらけの2.2.1が放置されているように、Indigoリポジトリにはバグだらけの3.0.0が放置されるということに…
CVSに5.4対応を突っ込む前に、それなりにバグ修正した版をSR2と同時にリリースすればいいのに。と、私は思うんですけどね。
PersonalForgeのlaboフォルダに上げたpdt_tools.pdtformatter.delegate_0.1.0.20111228.zip。
PDTのエディタにPDTのフォーマッタ(ただしCtrl+Iのみ)を呼び出すショートカットキーを追加します。
デフォルトのショートカットキーはCtrl+Shift+Iですが、Preferences>General>Keysで変更できます。
というモノで。
PDT Tools FormatterをインストールしたらPDTのCtrl+Iが使えなくなったじゃないかッ、と文句を言われたので(^^;)(却下しましたが)片手間にこさえてみました。
コマンド名は敢えてCorrect Indentationにしてあります。Correct Indentationですらないとは思いますけど。
Correct IndentationはCorrect Indentationで別途マトモな機能が要るんじゃないのかという気がしないでもないですが。
依然としてフォーマッタと格闘しています...
範囲選択してFormat Active Elements(Ctrl+I)した時の動作を変更しました。意味があるのかどうか謎ですが(^^;。この機能は誰も使わないような気がする…
PersonalForgeのlaboフォルダに上げときます。pdt_tools.formatter_1.3.0.20111227.zip。
そろそろお終い。
ヘルプから引用すると、
- 範囲選択なしでFormat(Ctrl+Shift+F)すると、ファイル全体をフォーマットします。
- 範囲を選択してFormat(Ctrl+Shift+F)すると、選択範囲のみフォーマットします。
- 範囲選択なしでFormat Active Elements(Ctrl+I)すると、カーソル位置の要素(関数/メソッドまたはクラスもしくはPHPコードブロックあるいはHTML要素)をフォーマットします。
- 範囲を選択してFormat Active Elements(Ctrl+I)すると、選択範囲に含まれる要素(同上)をフォーマットします。
- PHP ExplorerのコンテキストメニューでSource>Formatを選択すると、ファイル全体をフォーマットします。
ということになります。









