2009年3月22日 星期日

使用 Xdebug + Vim 對 PHP 逐行除錯

[Vim]
檢查 python 與 sign 前面是否為 + 號

# vim
:version


若為 - 號的話,就需要重裝 Vim

# /usr/ports/editors/vim/make WITH_PYTHON=yes install clean


接下來要安裝 Xdebug Client 在 Vim 上。
下載:http://www.vim.org/scripts/script.php?script_id=1929

解開後將 debugger.py 與 debugger.vim 複製到 /usr/local/share/vim/vim72/plugin/

PS.後來發現有人放出改過得 debugger.py,解決了原版只等待 5 秒的問題,並修改了一些切割視窗的配置。

文章在此:
http://www.workingsoftware.com.au/index.php?h=WebLog&author_id=11&entry_id=1
下在位址在此:
http://www.workingsoftware.com.au/debugger.py





[Xdebug]
安裝 Xdebug for PHP

# cd /usr/ports/devel/php-xdebug
# make install clean


修改 php.ini,加入 Xdebug 設定

# vim /usr/local/etc/php.ini


找到 Module Settings,在下面加入:

zend_extension=/usr/local/lib/php/20060613/xdebug.so

[debug]
; Remote settings
xdebug.remote_autostart=off
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=

; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32

; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32


重開 apache,並檢查 phpinfo 中有 Xdebug 資訊即為安裝成功。






[使用方法]

從瀏覽器啟動 Debug:

在你的網站上隨便開一個 PHP 網址,並在後面加上 ?XDEBUG_SESSION_START=1 參數,這樣就會啟動 Xdebug。

接下來用 Vim 開啟你要 Debug 的 PHP 檔,開啟後按下 F5。
這時候 Vim 畫面下方會出現一行字:
waiting for a new connection on port 9000 for 5 seconds

看到這行字後請在 5 秒鍾內用覽器開啟你正在編輯的這個 PHP 網頁,這樣 Vim 就會進入 Debug 模式了。




從 Command Line(CLI) 啟動 Debug:


# setenv "XDEBUG_CONFIG=vim=1"

打開 Vim,按下 F5。

# php -f debug_target.php

再回到 Vim 裡面去看,Debug 就已經啟動了!





如果要 Debug 用 system 開出來的 CLI PHP,則需要在 system 之前用 putenv 來設定環境變數

putenv("XDEBUG_CONFIG=vim=1");
system("php -f debug_target.php");




使用 Vim 進行 Debug 時會出現很多 畫面切割的小視窗,要其中移動必須按下 Ctrl + w,之後再按 上下左右,進行視窗的切換。

要改變視窗的大小則是按 Ctrl + w,之後再按 + 是變大,而 - 則是變小,按 = 則是回到預設值。最後按 F1 就會把目前視窗放到最大。

為瞭解決因為 Vim 共用 temp 檔而開啟多個 Vim 進行 debug 時每次都會說 暫存檔已經存在,只需要在 Vim 中下這個指令,並將每個 Vim 的 dir 都設成不一樣就可以了。

:set dir=/tmp



參考資料:
我同事 JohnPuPu的 Blog:http://blog.johnpupu.tw/?p=208


0 意見: