2016年9月18日

PHP - 使用 Vim、Vdebug 與 Xdebug 替容器化 PHP 應用除錯 ( Debug containerised PHP application using Xdebug with Vim and Vdebug )

Xdebug 是一個很強大的 Debug 工具,相信 PHP 開發者應該不陌生。但隨著 Docker 越來越受開發者青睞,Debug 環境、方式變得比較複雜。因此,本篇將介紹如何使用 Vim、Vdebug 與 Xdebug 替容器化 PHP 應用除錯。( If you want to read this article in English, you can visit here )



在 Docker 容器中安裝與設定 Xdebug:
首先,在安裝與設定 Xdebug 前,先把 Xdebug 需要使用的 Port 打開,指令如下:
# 假設 Xdebug 需要 port 9000,則加入 -p 9000:9000
docker run -d \
           -p 80:80 \
           -p 9000:9000 \
           ...
接著我們在 Docker 容器中安裝 Xdebug,指令如下:
# 進入 Docker 容器
docker exec -it <your-container-name> bash

# 安裝 Xdebug
pecl install xdebug
接著在 php.ini (如:/usr/local/etc/php/php.ini) 檔案最後加入 Xdebug 相關設定,範例如下:
# 省略部份內容 ...

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable=1
# 將你的 Docker 容器 IP 加入,如下:
xdebug.remote_host=192.168.99.100
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
為了確保 Xdebug 會正常運作,請重啟此容器。


安裝與設定 Vdebug:
為了要在 Vim 中 Debug,我們需要安裝 Vdebug 套件。而安裝 Vim 的套件有很多方式,使用 Vundle 來替你管理 Vim 套件是很方便的。接下來將透過 Vundle 來安裝 Vdebug,首先在 Vim 設定檔中 ( /etc/vimrc 或 ~/.vimrc ) 加入套件:
" 部分內容省略... "
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'gmarik/Vundle.vim'
" 加入 Vdebug 套件 "
Plugin 'joonty/vdebug'

call vundle#end()
filetype plugin indent on

" 部分內容省略... "

" 在 Vim 設定檔最後加入 Vdebug 設定,如下: " 
let g:vdebug_options = {
\ 'break_on_open': 1,
\ 'path_maps': {'/path/to/app/in/docker': '/path/to/app/in/local'},
\ 'port': '9000',
\ 'watch_window_style': 'compact'
\ }
接著在 Vim 中執行安裝套件指令,等待最下方顯示 Done 即完成安裝。
:PluginInstall


使用 Vdebug:
於開啟檔案的視窗中,透過快捷鍵 F10 設定中斷點 (Breakpoint),設定好後按下 F5 開啟一個 Debug Session,接著載入要 Debug 的頁面,於 Vim 中你就會看到 Vdebug 自動開啟 4 個視窗。你可以從這些視窗分別看到相關的參數值。


Environment :
  ・ Mac OS X
Reference :
  ・ Vdebug
  ・ Xdebug


熱門文章