ずっと自分はPHPでvar_dumpを唱えていました。
でも、もうvar_dump()って唱えたくないんですよ。
間違えて
// var_dump($hgoe);
とかコミットしてしまうじゃあないですか・・・・
だしタイプするのが、億劫なんですよ。
vdebugがあるじゃないか!!!
元々はVim + Vdebug + Xdebug でPHPのリモートデバッグ を読んで
「vimでもbreakpoint貼れるのかー。じゃあやってみよう」
ということでやってみた時のメモになります。
環境
- Scientific Linux 6.4
- CentOS 6.4
参考にしたサイト
事前準備に必要なもの
- vim 7.2 以降(で自分は試した)
- PHP 5.4.32 (5.6.0)でもやった
- 自分はphpenvで実行しています
- PHP extension Xdebug
- phpenvで入れた場合はデフォルトではいっています
- chrome (chromeからvdebugを起動します)
- python 2.6 以上
vim にvdebugをインストールする
NeoBundleでインストールしています
# ~/.vimrc
" PHP debugger
NeoBundle 'joonty/vdebug'
補足: OSの環境がutf-8じゃない方への設定
utf-8なサーバーで実行する場合vdebugがエラーになる可能性があります。
理由はvdebugの各種breakのマーカーなどの設定がutf-8じゃないと認識できない文字列をデフォルトで設定しているからです。
その場合は下記をvimrcに追加してください
# ~/.vimrc
let g:vdebug_force_ascii = 1
教えてくれたH.Nさんサンクス!!!
Xdebugの設定の確認
まずはXdebugの設定を確認しましょう
# $PHPENV_HOME/phpenv/versions/{PHPバージョン}/lib64/php/modules/xdebug.so
Enable xdebug extension module
zend_extension=/usr/lib/phpenv/versions/5.4.32/lib64/php/modules/xdebug.so
# 最低限これだけ入れておいてください
; see http://xdebug.org/docs/all_settings
html_errors=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000
コンソール上でVdebugを実行する方法
UnitTestやPHPバッチの動作確認等については下記の記事を参照してください
ブラウザと連動したVDebugを実行したい場合
ブラウザと連動した場合のVdebugを実行する場合はXDebug-helperを使用したVDebugの使用方法です。
chrome-extensionのXdebug-helperを入手
ブラウザでリロードしてXDebug用のcookie発行しての実行になります
joonty/vdebug 自体はこれがなくても動作すると思いますが、自分はよくわかりませんので、そこらへんはすごい人にお任せします
Xdebug-helperのオプション設定をする
一人でローカル環境を構築する場合はこの設定は必要ありません。
複数人でデバックする場合は個々にIDE_KEYを設定しないと上手くdebugできません。
chromeから
chrome://extensions/
でxdebug-helperのオプションをクリックしてください
IDE_KEYを設定する
デフォルトはXDEBUG_ECLIPSEです。
IDE_KEY項目のオプションを
- other
- 任意のIDE_KEY
を設定してください
これで前準備は完了です。
VDebugを起動してみる
vimでファイルを開いてbreakpointを貼りたいところで fn + F10
をおしてください
その後 fn + F5
を押すとdebugの待ち状態になります。
デフォルトだと20秒間何もアクションが起こらないとErrorになります。
(きっとどこかで設定できるはず)
chrome側のxdebug-helperを Debug
に変更する
xdebug-helperのモードを「Debug」にします
これでchromeのブラウザをリロードしてください
下記のような感じになります。
vdebugの使い方
基本は Vim + Vdebug + Xdebug でPHPのリモートデバッグ に記載されていますのでこちらを見てください。
コマンド | 説明 |
---|---|
fn + F10 | breakpointを貼る |
fn + F5 | デバッガの起動 |
fn + F3 | ステップイン |
fn + F2 | ステップアウト |
fn + F9 |
fn + F10 で設定した場所までの実行 |
fn + F7 | デバックの終了 (debug画面を :q とかで終了すると次回起動時にエラーになるので注意) |
StackTraceからのファイルジャンプ
StackTraceに出ている対象のファイル一覧でエンターを押すとそのファイルにジャンプできます。
変数のWatch画面について
対象の変数の中身がArrayやObjectで構造体が深い場合はエンターを押すと展開できます
これでPHPで var_dump()
の魔法を唱えなくてもいい第一歩が踏み出せそうです。