详解用dbgpavim在vim中调试php/python程序

本文主要介绍如何在服务器上用vim + x#code/8684.html” target=”_blank”>debug调试php程序,目前虽然有不少介绍如何用eclipse + xdebug在开发人员工作机上调试php的文章,但对于如何系统的配置vim + xdebug还是比较少的,而且目前关于vim设置的文章都用一个比较老的插件。这里主要介绍一个新插件dbgpavim,它相对于老的一些插件有很多优势。同时该插件可完美的用于python程序的调试。另外vim + xdebug相对于eclipse + xdebug也有不少优势,将在文章讲述。

实现原理

dbgp是调试器后台和调试器界面通信的一种协议,用于多种脚本语言的调试。xdebug是用于调试php的dbgp实现。vim要和xdebug互通,实现php的调试,需要能够理解dbgp协议,并能发送dbgp指令。dbgpavim就是这样一个插件,它使vim能够接受dbgp请求,并发送dbgp指令,以达到调试目的。dbgpavim的名字源于dbgp@vim。

activestate提供了用于调试python/ruby的dbgp实现komodo remote debugging package,后面有一节将讲到如何使它和vim互通,以调试python。用户将能以此类推出如何调试ruby/nodejs等脚本语言。

配置xdebug

安装xdebug可以参考http://xdebug.org/docs/install。

编辑php.ini,加入以下两行:

zend_extension=/path/to/xdebug.so
xdebug.remote_enable=1

编辑你的httpd.conf,加入以下行:

php_value xdebug.remote_autostart 1

注:这一行并非必须的,如果不加这一行,你需要在访问http服务器的url里加上xdebug_session_start=1的参数,如: http://localhost/index.php?xdebug_session_start=1。

如果有多个开发人员同时需要调试不同的virtualhost,可以在你的virtualhost段中加入以下行:

php_value xdebug.remote_port 9009

注:这里的9009就是vim作为dbgp服务器应当监听的端口,不同的开发人员在不同的virtualhost中用各自不同的端口号。这个端口号和下一节提到的dbgpavimport要一致。不加这一行,默认的端口号是9000。最后可通过phpinfo.php检查你的xdebug配置是否正确,你必须能够看到以下这些行的值如下(主要是前两列):

xdebug.remote_autostart on off
xdebug.remote_enable on on
xdebug.remote_handler dbgp dbgp
xdebug.remote_host 127.0.0.1 127.0.0.1
xdebug.remote_port 9009 9000

phpinfo.php文件内容如下:

配置vim + dbgpavim

dbgpavim插件本身是用python实现的,所以需要你的vim支持python 2.7。打开你的vim,输入命令

:version

如果能看到“+python”,说明你的vim是支持python的。 如果看到的是“-python”,说明你的vim不支持python,你可以按如下步骤编译自己的vim:

安装python 2.7

export path=/path/to/python2.7/bin:$path

用以下命令编译vim:

./configure –prefix=/opt/vim –enable-pythoninterp –with-python-config-dir=/usr/lib/python2.7/config
make
make install

注:这里的/usr/lib/python2.7/config取决于你把python2.7安装到什么位置。

从这里或者这里下载dbgpavim,放到你的~/.vim目录下,并编辑的你的~/.vimrc,加入以下两行:

let g:dbgpavimport = 9009
let g:dbgpavimbreakatentry = 0

注:这里的9009和上一节的9009要一致,如果上一节没有配置xdebug.remote_port,这里也不需要配置,因为它们都会使用默认的9000。 dbgpavimbreakatentry=0告诉vim不在入口处停下,这样只会在断点处停下。

你可以重新启动vim,按f5检查你的dbgpavim配置是否正确。如果你配置成功的话,你会做vim窗口的右下角看到提示信息如下:

bap-lisn-9009

它表示vim目前正在监听9009端口,bap说明它只会在断点处停下,其他提示信息格式如下:

断点状态

bae break at entry,在入口处停下
bap break only at breakpoints,只在断点处停下

调试器状态

lisn 调试器已启动,正处于监听状态。
pend-n 调试器已捕捉到连接请求,可以按f5进入调试模式了。
conn vim正处于调试模式中。
clsd 调试器已停止。在apache环境下调试php

现在确认配置正确后,可以用vim打开你需要调试的文件,跳到你需要调试的行,按f10设置当前行为断点,并按f5启动调试器。

用浏览器访问会调用相应php文件的url,你会看到vim状态栏里的的提示信息变成:

bap-pend-1

它告诉你已经有一个连接被拦截,可以按f5开始调试了。

vim + dbgpavim相对于eclipse + xdebug的优势

大多数服务器不会启动xserver,无法在服务器上启动eclipse。如果在开发人员工作机上启动eclipse + xdebug,就相当于把dbgp服务器在工作机上运行,你需要设置路径映射,也就是http server执行的一份代码在服务器上,eclipse调试时打开的是一份代码,在工作机上,要保证这两份代码能对应上需要映射路径。当程序规模不大时,问题不大,当程序规模大时,会比较麻烦,而且要保证代码的同步,否则会串行。

同时可以遭遇网络防火墙之类的问题。

vim + dbgpavim也是支持远程调试的,但同样避免不了路径映射的设置,如下:

let g:dbgpavimpathmap = [[‘d:/works/php’,’/var/www’],]

注:这里的9009端口就相当于上面为php调试时设置的xdebug.remote_port,需要和dbgpavimport保持一致。

回到你的vim窗口,将看到提示信息为pend-1。

按f5进入调试模式。

dbgpavim相对于其他插件的优势

dbgpavim源于vim早期的一个dbgp插件http://www.vim.org/scripts/script.php?script_’
let g:dbgpavimkeystepover = ”
let g:dbgpavimkeystepinto = ”
let g:dbgpavimkeystepout = ”
let g:dbgpavimkeypropertyget = ”
let g:dbgpavimkeycontextget = ”
let g:dbgpavimkeytogglebp = ”
let g:dbgpavimkeytogglebae = ”
let g:dbgpavimkeyrelayout = ”

vim命令,所有命令只有第一个字母为大写。

:bl 列出所有断点
:bp 与f10功能相同 p 这个命令可用于快速调试当前文件,它实现了如下功能:
1. 检查命令行下xdebug/pydbgp的设置是否正确
2. 启动调试器监听
3. 用php/pydbgp执行当前文件 g 查看较长变量的值,比如:pg $this->savings[3]
:up 调用堆栈往上一级 n 调用堆栈往下一级
:wc [$foo] 打开/关闭对变量$foo的监视。如果没有参数,就监视当前执行环境下的所有变量。
:we 打开/关闭对语句foo的监视,即每一单步后自动执行foo语句。
:wl 列出所有被监视的变量或语句。
:children 对于数组默认显示前1024个元素,这个命令可以修改。 epth 对于复杂变量,默认只显示下一层成员,这个命令可以设置限制多层。
:length 对于字符串变量,默认执行显示前1024个字符,这个命令可以设置显示长度。

以上就是详解用dbgpavim在vim中调试php/python程序的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类