今日はゲームもアニメも関係ない話。
Netbeansを使ってPHP開発をしていた時、なぜかデバッグ時にローカル変数が見れなくて困ってました。この件についてハマって解決できたのでメモしときます。
実行環境
実行環境は以下のとおりでした。
- OS Ubuntu 10.04LTS
- PHP5.3+xdebug(apt-getでインストールしたもので、パッケージ情報は最新に更新)
- リモートの環境はNetbeans 7.1.1。Eclipseなどは試してない
症状
- 実行中断状態でローカル変数の中身が見れない
- ただし、$thisなど一部は表示されている
- ブレークポイントやステップ実行はちゃんと動く
- php.iniの設定は問題ないはず(xdebug.show_local_vars=on等)
いつもどおりGoogleさんに聞いても同様の人が見つからず困っていました。確か前は動いていたんだけども・・・。この時調べたおかげでxdebugの設定には多少詳しくなった気がします。
Netbeansが変数名を取得できていることに気づく
ある日、やっぱり変数の中身が見れないなー、見れたらデバッグ速度100倍なのになあーと困りながら変数ウィンドウをいじってると、「フィルタ」というのが出てきました。中身の無い変数等を表示しない設定になっているようです。
お、これは?と思い、試しに全部表示するようにすると、まあ確かに全部表示されましたが結局すべての値が”Undefined”になっており、意味のないものでした。
しかしここで疑問が。
んん? 変数名はちゃんと取ってきてる・・・? 変数の中身だけとれてないというならもうちょっとでいけるんじゃないか?
再度調査し、解決へ
確か変数名は取れるけど中身が見れない症状の人はいて、パッチ作ったって話があったよな・・・。でもあれって2010年くらいの古い話だったような。
Xdebug にパッチを送ってみた。 – do_akiの徒然想記
改めてページを探すとありました。やっぱり2年くらい前の記事で、既にパッチが取り込まれたという情報だったし、Ubuntuパッケージで最新版使ってるから大丈夫だろうとスルーしてたようです。
ここでxdebugのバージョンを確認すると・・・。上記事のパッチが取り込まれたバージョンとかなり近い。というわけで、ためしにパッケージ版のxdebugを外してpeclからインストールすることにしました。
1 2 |
sudo apt-get remove php5-xdebug pecl install xdebug |
これでどうだ、と試してみたところ。
いけました! Netbeans上でブレークかけるとローカル変数が丸見えです。
原因と教訓
ということで原因はUbuntuのパッケージに入っているxdebugが古いバグ入りバージョンだったから、ということでした。
- 最新のパッケージでも新しいとは限らない
- 枯れているようでもバグ入りの時がある
- 2年くらい前のパッチなら当たってないかもしれない
これからはまともにデバッグできそうです。パッチ作成者の方に感謝します。
![]() |
パーフェクトPHP (PERFECT SERIES 3) 小川 雄大,柄沢 聡太郎,橋口 誠技術評論社 売り上げランキング : 8814 |