PHPでVim使って開発していてvar_dump()を唱えているならVim Plugin のvdebugを使ってみろって


ずっと自分はPHPでvar_dumpを唱えていました。
でも、もうvar_dump()って唱えたくないんですよ。
間違えて

```php:/path/to/hoge
// var_dump($hgoe);
```

とかコミットしてしまうじゃあないですか・・・・
だしタイプするのが、億劫なんですよ。

## [vdebug](https://github.com/joonty/vdebug)があるじゃないか！！！

元々は[Vim + Vdebug + Xdebug でPHPのリモートデバッグ](http://blog.code-life.net/blog/2012/10/01/vim-vdebug-xdebug/) を読んで
「vimでもbreakpoint貼れるのかー。じゃあやってみよう」
ということでやってみた時のメモになります。

## 環境

* Scientific Linux 6.4
* CentOS 6.4

## 参考にしたサイト

* [Vim + Vdebug + Xdebug でPHPのリモートデバッグ](http://blog.code-life.net/blog/2012/10/01/vim-vdebug-xdebug/)
* [joonty/vdebug](https://github.com/joonty/vdebug)
* [VdebugでPHPをデバッグする](http://qiita.com/toshiro3/items/3eaa99293f6496d03e28)

## 事前準備に必要なもの

* vim 7.2 以降（で自分は試した)
* PHP 5.4.32 (5.6.0)でもやった
 * 自分は[phpenv](https://github.com/CHH/phpenv)で実行しています
* PHP extension [Xdebug](http://xdebug.org/)
 * [phpenv](https://github.com/CHH/phpenv)で入れた場合はデフォルトではいっています
* chrome (chromeからvdebugを起動します)
* python 2.6 以上

## vim にvdebugをインストールする

[NeoBundle](https://github.com/Shougo/neobundle.vim)でインストールしています

```vim
# ~/.vimrc

" PHP debugger
NeoBundle 'joonty/vdebug'
```

### 補足: OSの環境がutf-8じゃない方への設定

utf-8なサーバーで実行する場合vdebugがエラーになる可能性があります。
理由はvdebugの各種breakのマーカーなどの設定がutf-8じゃないと認識できない文字列をデフォルトで設定しているからです。

その場合は下記をvimrcに追加してください

```vim
# ~/.vimrc
let g:vdebug_force_ascii = 1
```

教えてくれたH.Nさんサンクス！！！


## Xdebugの設定の確認

まずはXdebugの設定を確認しましょう

```php
# $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でPHPをデバッグする](http://qiita.com/toshiro3/items/3eaa99293f6496d03e28)


## ブラウザと連動したVDebugを実行したい場合

ブラウザと連動した場合のVdebugを実行する場合はXDebug-helperを使用したVDebugの使用方法です。

### chrome-extensionの[Xdebug-helper](https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc)を入手

ブラウザでリロードしてXDebug用のcookie発行しての実行になります
[joonty/vdebug](https://github.com/joonty/vdebug) 自体はこれがなくても動作すると思いますが、自分はよくわかりませんので、そこらへんはすごい人にお任せします

* [Xdebug-helper](https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc)


### [Xdebug-helper](https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc)のオプション設定をする

一人でローカル環境を構築する場合はこの設定は必要ありません。
複数人でデバックする場合は個々にIDE_KEYを設定しないと上手くdebugできません。

chromeから

```
chrome://extensions/
```

でxdebug-helperのオプションをクリックしてください



![chrome-extension設定](https://raw.githubusercontent.com/ryurock/qiita_images/master/chrome-extension-xdebug-helper.png)

### IDE_KEYを設定する

デフォルトはXDEBUG_ECLIPSEです。

IDE_KEY項目のオプションを

* other
* 任意のIDE_KEY

を設定してください

![xdebug-helper オプション](https://raw.githubusercontent.com/ryurock/qiita_images/master/xdebug-helper.png)



これで前準備は完了です。

## VDebugを起動してみる

vimでファイルを開いてbreakpointを貼りたいところで ``` fn + F10 ``` をおしてください

![vdebugでbrealpointを貼った状態](https://raw.githubusercontent.com/ryurock/qiita_images/master/vdebug1.png)

その後 ```fn + F5 ``` を押すとdebugの待ち状態になります。
デフォルトだと20秒間何もアクションが起こらないとErrorになります。
(きっとどこかで設定できるはず)

![vdebugのdebug待ち状態になったところ](https://raw.githubusercontent.com/ryurock/qiita_images/master/vdebug2.png)

### chrome側のxdebug-helperを ``` Debug ``` に変更する

xdebug-helperのモードを「Debug」にします

![xdebug-helperをONにする](https://raw.githubusercontent.com/ryurock/qiita_images/master/vdebug3.png)


これでchromeのブラウザをリロードしてください
下記のような感じになります。

![vdeub 起動した状態](https://raw.githubusercontent.com/ryurock/qiita_images/master/vdebug4.png)


## vdebugの使い方

基本は [Vim + Vdebug + Xdebug でPHPのリモートデバッグ](http://blog.code-life.net/blog/2012/10/01/vim-vdebug-xdebug/) に記載されていますのでこちらを見てください。


| コマンド | 説明 |
|----------|------------------|
| 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() ``` の魔法を唱えなくてもいい第一歩が踏み出せそうです。