Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명

高洛峰
풀어 주다: 2017-03-23 16:17:04
원래의
1579명이 탐색했습니다.

이 글에서는 주로 VIM + 프로그램을 디버깅하는 데에도 완벽하게 사용될 수 있습니다. 또한 VIM + XDebug는 Eclipse + XDebug에 비해 많은 장점이 있으며 이에 대해서는 A 프로토콜에서 설명합니다. 여러 스크립팅 언어를 디버깅하는 데 사용되는 인터페이스 통신으로, VIM이 DBGp 요청을 수락하고 디버깅 목적으로 DBGp 명령을 보낼 수 있도록 하는 플러그인입니다. ActiveState가 제공하는 것입니다. Python/Ruby 디버깅을 위한 DBGp 구현. Komodo 원격 디버깅 패키지, 이후 섹션에서는 Python을 디버깅하기 위해 VIM과 상호 운용하는 방법에 대해 설명합니다. 사용자는 Ruby/nodejs.XDebug 구성

설치Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명XDebug는 http://xdebug.org/docs/install을 참조할 수 있습니다. >php.ini를 편집하고 다음 두 줄을 추가하세요:

zend_extension=/path/to/xdebug.so
 xdebug.remote_enable=1
로그인 후 복사

httpd.conf를 편집하고 다음 줄을 추가하세요:

    1. 참고: 이 줄을 추가하지 않는 경우 액세스하려면 URL에 XDEBUG_SESSION_START=1을 추가해야 합니다. HTTP 서버 매개변수(예: http://localhost/index.php?XDEBUG_SESSION_START=1) 여러 개발자가 동시에 서로 다른 VirtualHost를 디버깅해야 하는 경우 VirtualHost 세그먼트에 다음 줄을 추가할 수 있습니다.

       php_value xdebug.remote_port 9009
      로그인 후 복사

      참고: VIM이 DBGp 서버로 수신해야 하는 포트는 9009입니다. 개발자마다 VirtualHost마다 다른 포트 번호를 사용합니다. 이 포트 번호는 다음 섹션에 언급된 dbgPavimPort와 일치해야 합니다. 이 줄이 없으면 기본 포트 번호는 9000입니다.
    2. 마지막으로
    3. 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 파일의 내용은 다음과 같습니다.
    4. <?php
           phpinfo();
       ?>
      로그인 후 복사
    5. VIM + DBGPavim 구성

      DBGPavim 플러그인 자체는 Python으로 구현되므로 VIM이 필요합니다. Python 2.7을 지원합니다. VIM을 열고
    6. :version
      로그인 후 복사
    명령을 입력하세요. "+python"이 보이면 VIM이 Python을 지원한다는 의미입니다. "-python"이 표시되면 VIM이 Python을 지원하지 않는다는 의미입니다.
        Python 2.7 설치
      1. 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|bap>-<LISN|PENDn|CONN|CLSD>
로그인 후 복사

Breakpoint

Status

    bae Break At Entry,在入口处停下
    bap Break only At breakPoints,只在断点处停下
    로그인 후 복사
  1. 디버거 상태

    LISN	调试器已启动,正处于监听状态。
    PEND-n	调试器已捕捉到连接请求,可以按F5进入调试模式了。
    CONN	VIM正处于调试模式中。
    CLSD	调试器已停止。
    로그인 후 복사

    Apache 환경에서 PHP 디버깅
  2. 이제 구성이 올바른지 확인한 후 VIM을 사용하여 디버그해야 하는 파일을 열고 디버그해야 하는 줄로 이동한 다음 F10을 눌러 현재를 설정할 수 있습니다.
  3. 동작
  4. 중단점을 지정하고 F5 키를 눌러 디버거를 시작합니다.

  5. 用浏览器访问会调用相应PHP文件的URL,你会看到VIM状态栏里的的提示信息变成:

     bap-PEND-1
    로그인 후 복사
  1. 它告诉你已经有一个连接被拦截,可以按F5开始调试了。Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명

  2. 按F5进入调试模式,你会看到VIM窗口被分成三部分:左上为源码窗口,右上为变量查看窗口,下方为调用堆栈窗口。Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명在源码窗口里,把光标定位到某一个变量上面按F12,在变量查看窗口就能看到该变量的值,如果该变量不是简单变量,其成员也会显示出来。如果该变量的某个成员仍不是简单变量,该行后面会出现一个加号,在该行按回车键,该成员的值将被继续展开。如果你想直接查看某个变量的成员变量,可以按v切换到visual模式,选中该成员再按F12,比如$this->login。在堆栈窗口,当你在某一行按回车,将跳到该层。最上面一行是最底层,最下面一行是最顶层。切换调用堆栈的层次,可以帮助你查看各个层次的变量,比如有些全局变量只有在最顶层才能看到。对于源码中没有出现的变量,你可以通过命令:Pg来查看,比如:

      g $this->memberShip
    로그인 후 복사
  1. 你可以开始你的调试了,随时按F1可调出帮助窗口,再次F1就关闭帮助窗口。Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명

调试命令行启动的PHP程序

如果你需要调试命令行启动的PHP程序,也需要保证PHP程序端的设置是正确的。这些设置可以像前面一样在php.ini中设定,也可以通过命令行参数来设定。比如:

php -dxdebug.remote_autostart=1 -dxdebug.remote_port=9009 test.php
로그인 후 복사

如果你的命令行使用的ini和apache中php5_module使用的ini是一样的(通常情况是这样的),你不需要在参数中再来做这些设置。但如果你在ini中的设置是放在某个virtualhost段里,你仍然需要加上这些设置。 你可以通过命令行:

php --ini
로그인 후 복사

来查看你的命令行用的是哪个ini。

接着你可以使用命令:

php -r "phpinfo();"|grep xdebug.remote_
로그인 후 복사

来检查你的XDebug设置。

基本步骤如下:

  1. 用VIM打开你需要调试的PHP文件,F10设置断点,F5启动调试监听。

  2. 从命令行运行php程序如上。

  3. 回到你的VIM窗口,将看到提示信息为PEND-1。

  4. 按F5进入调试模式。

DBGPavim提供一个:Dp命令简化命令行程序的调试。只需打开你的PHP文件,输入命令:Dp即可。

调试Python程序

前面说过VIM + DBGPavim作为DBGp协议的服务器,可以与XDebug协同工作,也可以与ActiveState提供的Komodo Python Remote Debugging Client协同工作,实现Python程序的调试,具体步骤如下:

  1. 从这里下载安装Komodo Python Remote Debugging Client,把解压后的bin目录加到你的PATH路径中,注意bin目录下的pydbgp文件。

  2. 用VIM打开你需要调试的Python文件,F10设置断点,F5启动调试监听。

  3. 通过pydbgp运行你的Python程序,如

     pydbgp -d 127.0.0.1:9009 test.py
    로그인 후 복사
  4. 上面的:Dp命令同样适用于Python调试,下图为Windows 7下用GVIM + pydbgp调试Python的截图。 Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명

    VIM + DBGPavim相对于Eclipse + XDebug的优势

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

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

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

    let g:dbgPavimPathMap = [[&#39;D:/works/php&#39;,&#39;/var/www&#39;],]
    로그인 후 복사
    1. 注:这里的9009端口就相当于上面为PHP调试时设置的xdebug.remote_port,需要和dbgPavimPort保持一致。

    2. 回到你的VIM窗口,将看到提示信息为PEND-1。

    3. 按F5进入调试模式。

DBGPavim相对于其他插件的优势

DBGPavim源于VIM早期的一个DBGp插件http://www.vim.org/scripts/script.php?script_id=1152,从这个插件还衍生出其他一些DBGp插件。但DBGPavim重写了作为调试器后台的DBGp服务器,异步监听,使得VIM在监听DBGp的同时不妨碍用户与VIM之间的交互。用户按F5启动调试监听后,可继续使用VIM,随时可按F6停止监听。

DBGPavim会监听所有来自DBGp客户端如XDebug、pydbgp的DBGp连接,不像其它插件只能捕获第一个连接。这对于大规模的WEB程序是必须的,因为现在的一次网页加载通常会触发多个HTTP请求,而我们需要调试的可能来自其中的任何一个。 同时DBGPavim支持只在断点处停下,其它的插件都是在入口处停下,需要程序员一步步跟踪进去。这省了开发人员很大的麻烦,而且避免出错后一次次的重启调试。

相信你也已经发现,DBGPavim可以与Windows下的GVIM一起工作,并且工作的很好。

DBGPavim的详细使用参考

VIM normal模式下

F5	启动调试监听,或者有可调试连接时进入调试模式。
F6	停止调试监听。
F8	切换dbgPavimBreakAtEntry的值,按这个键你可以看到状态栏提示信息在bae和bap之间切换,即是否在PHP程序入口处停下。
F10	在当前行设置或删除断点,在调试模式下同样适用。
로그인 후 복사

调试模式下

F1	打开或关闭帮助窗口
F2	单步进入
F3	单步跳过
F4	单步退出
F5	继续执行直到下一个断点,如果后续没有断点就退出调试模式。
F6	停止调试,这个按键就导致VIM退出调试模式,并且停止调试监听。
F7	调试时执行php语句,按下F7后,用户可在变量查看窗口输入php语句,回车后执行。
F9	最大化某个子窗口,或者重置窗口布局。
F11	查看当前执行环境下的所有变量的值,在不同的堆栈层次,会有不同的结果。
F12	查看光标下的变量的值。
로그인 후 복사

以上功能键为默认配置,你如果习惯多数浏览器的按键设置,可以把下面的代码加入你的.vimrc中:

let g:dbgPavimKeyRun = &#39;<F8>&#39;
let g:dbgPavimKeyStepOver = &#39;<F10>&#39;
let g:dbgPavimKeyStepInto = &#39;<F11>&#39;
let g:dbgPavimKeyStepOut = &#39;<F12>&#39;
let g:dbgPavimKeyPropertyGet = &#39;<F3>&#39;
let g:dbgPavimKeyContextGet = &#39;<F4>&#39;
let g:dbgPavimKeyToggleBp = &#39;<F9>&#39;
let g:dbgPavimKeyToggleBae = &#39;<F5>&#39;
let g:dbgPavimKeyRelayout = &#39;<F2>&#39;
로그인 후 복사

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

:Bl	列出所有断点
:Bp	与F10功能相同  p	这个命令可用于快速调试当前文件,它实现了如下功能:

    1. 检查命令行下XDebug/pydbgp的设置是否正确
    2. 启动调试器监听
    3. 用php/pydbgp执行当前文件  g <longfoo>	查看较长变量的值,比如:Pg $this->savings[3]
:Up	调用堆栈往上一级  n	调用堆栈往下一级
:Wc [$foo]	打开/关闭对变量$foo的监视。如果没有参数,就监视当前执行环境下的所有变量。
:We <foo>	打开/关闭对语句foo的监视,即每一单步后自动执行foo语句。
:Wl	列出所有被监视的变量或语句。
:Children <n>	对于数组默认显示前1024个元素,这个命令可以修改。  epth <n>	对于复杂变量,默认只显示下一层成员,这个命令可以设置限制多层。
:Length <n>	对于字符串变量,默认执行显示前1024个字符,这个命令可以设置显示长度。
로그인 후 복사

위 내용은 Vim에서 DBGPavim을 사용하여 PHP/Python 프로그램을 디버깅하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿