• Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    Python
  • Created over 12 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

This is a plugin to enable php debug in VIM with Xdebug, with a new debug engine.

This is a VIM plugin to enable php debuging with Xdebug, to enable python debugging with Komodo-PythonRemoteDebugging-Client, which originates from http://www.vim.org/scripts/script.php?script_id=1152. But most of the code, especially the debugger backend has been rewritten.

Generally speaking, this is a plugin to make VIM working as a DBGP server, so that VIM can talk with DBGP clients like Xdebug and Komodo.

PHP debugging Tested with:

  • XDebug 2.2 - PHP 5.4 - GVIM 7.3 - Python 2.7 @ Windows 7
  • XDebug 2.0 - PHP 5.2 - VIM 7.3 - Python 2.7 @ Linux
  • XDebug 2.2 - PHP 5.2 - VIM 7.3 - Python 2.7 @ Linux
  • XDebug 2.0 - PHP 5.2 - VIM 7.3 - Python 2.3 @ Linux (Only early version of this plugin works with python2.3)
  • XDebug 2.1 - PHP 5.3 - MacVIM 7.3 - Python 2.7 @ OS X 10.8

Python debugging Tested with:

  • Komodo Python Remote Debugging Client - Python 2.7 - MacVIM 7.3 @ Mac OS X 10.8
  • Komodo Python Remote Debugging Client - Python 2.7 - GVIM 7.3 @ Windows 7
  • Komodo Python Remote Debugging Client - Python 2.7 - VIM 7.3 @ Linux

Screen shot

Debugging PHP DBGPavim-php Debugging Python DBGPavim-python

More at http://sharing-from-brook.16002.n6.nabble.com/Debug-php-in-VIM-with-Xdebug-and-DBGPavim-td4930670.html.

Enhancements

Non blocking debugger backend.

So that VIM users do not need to wait for connection from server. No timeouts; users press F5 to start debugger backend and use VIM normally. Debug backend won't stop users from interacting with VIM. Users can press F6 to stop debugger backend at any time.

Catch all connections from apache server.

This is very important for a large website, especially for pages that contain AJAX requests. In that case, one reload of a page may trigger dozens of HTTP requests, each of them going to a different URL. The new debugger backend will catch all connections from the server.

If you would not like catch all connections from HTTP server, then add below line to your vimrc:

let g:dbgPavimOnce = 1

This setting makes your site accessible when you're in debugging. By default, your site is blocked when you're in debugging, because all connections are caught by debugger backend.

Break only at breakpoints

The debugger backend breaks only at breakpoints by default. If you would like the debugger backend to break at entry, then add below line to your vimrc:

let g:dbgPavimBreakAtEntry = 1

Debug multiple different sessions simultaneously in diffrent tabs

If there are multiple connections to your server at the same time, you can debug all of them simultaneously in different tabs.

The below screencast demos the debugging of two different sessions: one for PHP within Apache, another for Python CLI.

DBGPavim-simultaneously

New commands and function keys

In normal mode

<F5>      => start debugger backend
<F6>      => stop debugger backend
<F8>      => toggle dbgPavimBreakAtEntry, when g:dbgPavimBreakAtEntry=0, debugger backend breaks only at breakpoints.
<F10>     => toggle breakpoint at current line

:Bl        => to list all breakpoints
:Bp [expr] => toggle breakpoint on current line, if expr is provided, that is conditional breakpoint, for example, `:Bp ($i > 3)` only breaks when $i is larger than 3.
:Dp [args] => to debug current file from CLI, it will run 'php -dxdebug.remote_autostart=1 -dxdebug.remote_port=<your_port> <curret_file_in_vim> [args]'


:Wc [$foo] => to toggle watch on variable $foo, if no parameter is provided, it will toggle watch on CONTEXT.
:We [foo]  => to eval expression `foo` automatically after each step.
:Wl        => to list all watched variables. By default, you can get output like *CONTEXT*, which means context are automatically populated each step in WATCH WINDOW.

In debugging mode

<F1>      => toggle help window
<F2>      => step into
<F3>      => step over
<F4>      => step out
<F5>      => start debugging / run
<F6>      => stop debugging
<F7>      => evalute expression and display result. cursor is automatically move to watch window. type line and just press `Enter`.
<F9>      => toggle layout
<F11>     => shows all variables
<F12>     => shows variable on current cursor

You can define your own key mappings as below:

let g:dbgPavimKeyRun = '<F8>'
let g:dbgPavimKeyStepOver = '<F10>'
let g:dbgPavimKeyStepInto = '<F11>'
let g:dbgPavimKeyStepOut = '<F12>'
let g:dbgPavimKeyPropertyGet = '<F3>'
let g:dbgPavimKeyContextGet = '<F4>'
let g:dbgPavimKeyToggleBp = '<F9>'
let g:dbgPavimKeyToggleBae = '<F5>'
let g:dbgPavimKeyRelayout = '<F2>'

:Pg        => to print value of complex variables like $this->savings[3]
:Up        => goto upper level of stack
:Dn        => goto lower level of stack

In Watch window

If you press `Enter` at a line which ends with plus to expand it.

If you press `Enter` at a line of output from command `:Bl`, that breakpoint will be located.

In Stack window

If you press `Enter` at a line, stack level will be set.

Windows Support

Status line for debugger backend

After user press F5 to start debugger backend, a string like "bap-LISN-9000" will show up at the right side of status line. Here 9000 is the listening port of debugger, which is set by g:dbgPavimPort.

The status string looks like:

<bae|bap>-<LISN|PENDn|CONN|CLSD>

bae       => means Break At Entry
bap       => means Break only At breakPoints

LISN      => means the debugger backend is listening.
PENDn     => means there are n connections waiting for debugging.
CONN      => means debug session has been established, and being debugged.
CLSD      => means the debugger backend has stopped.

New layout of windows

Remote debugging

In case that you need run VIM on a different machine from server where apache httpd runs, configuration for DBGPavim:

let g:dbgPavimPathMap = [['D:/works/php','/var/www'],]

A change to the Apache configuration is also necessary:

php_value xdebug.remote_host <ip_address_where_you_run_vim>

Usage

  • Make sure your vim has python (at least 2.3) supported. To check, run :version in vim.

If your VIM doesn't support python, download VIM source package from http://www.vim.org/download.php, then build your own VIM:

./configure --prefix=/opt/vim --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.4/config
make
make install
  • Install xdebug for php, and edit php.ini

      zend_extension=path_to_xdebug.so
      xdebug.remote_enable=1
      
  • Edit your ~/.vimrc

      let g:dbgPavimPort = 9009
      let g:dbgPavimBreakAtEntry = 0
      
  • Edit your apche configure file

In your VirtualHost section, set debugger port same as the one in your vimrc:

php_value xdebug.remote_port 9009
  • Save dbgpavim.py and dbgpavim.vim to your ~/.vim/plugin

  • Open your php file, use :Bp to set breakpoints

  • Now, press F5 to start debugger backend

  • Back to your browser, add XDEBUG_SESSION_START=1 to your URL, for example, http://localhost/index.php?XDEBUG_SESSION_START=1.

If you are tired of adding XDEBUG_SESSION_START=1 in query string, there is a XDEBUG_SESSION helper at http://userscripts.org/scripts/review/132695, a user script for Google Chrome. It also works for Firefox via GreaseMonkey.

Or modify your apache configuration (httpd.conf) --

<VirtualHost>
  ...
  php_value xdebug.remote_port 9009
  php_value xdebug.remote_autostart 1
</VirtualHost>

CLI debugging

  • If you would like to debug from CLI, start your php script like

    php -dxdebug.remote_autostart=1 -dxdebug.remote_port=9009 test.php

  • There is new command :Dp to debug current file:

    php -dxdebug.remote_autostart=1 -dxdebug.remote_port=9009

Python debugging

DBGPavim is both a DBGP protocol server and VIM debugger backend, so it can help to debug Python code.

I haved tried it with:

  • Komodo Python Remote Debugging Client --Python 2.7 - MacVim 7.3 @ Mac OS X 10.8
  1. Download Komodo Python Remote Debugging Client from http://code.activestate.com/komodo/remotedebugging/, for Mac, it's Komodo-PythonRemoteDebugging-7.1.2-73175-macosx-x86.tar.gz (Refer to http://docs.activestate.com/komodo/4.4/debugpython.html)

  2. Open the python script file with VIM, and Press to listen.

  3. extract the package, and run

    bin/pydbgp -d 127.0.0.1:9000 /works/scriptbundle/python/playpen.py

  4. then the others are same as php debugging.

More Repositories

1

Surfingkeys

Map your keys for web surfing, expand your browser with javascript and keyboard.
JavaScript
5,209
star
2

KeyCastOW

keystroke visualizer for Windows, lets you easily display your keystrokes while recording screencasts.
C++
922
star
3

cscope.vim

A vim plugin to help you to create/update cscope database and connect to existing proper database automatically.
Vim Script
120
star
4

brookhong.github.io

The site to share pre-built tools or something interesting.
JavaScript
51
star
5

tts

A command line tool to read text with Microsoft Speech API (SAPI).
C++
45
star
6

cloudboard.vim

a cloud-based clipboard, yank text into a numbered cloud register on a machine, put the text from the cloud register on another machine.
Python
33
star
7

telescope-pathogen.nvim

a telescope extension to help you to navigate through different path when using builtin actions from telescope such as `grep_string`, `find_files` and `live_grep`.
Lua
16
star
8

kv

Command line dictionary tool
C
15
star
9

k.vim

let you quickly run external command, and show the result in a scratch window.
Vim Script
13
star
10

vimfiles

vimfiles
Vim Script
7
star
11

wikenotes

wikenotes
C
5
star
12

jdb.vim

A jdb wrapper for VIM as a plugin
Vim Script
5
star
13

obs_event_trigger

a jenkins plugin to trigger build by OBS event
Java
4
star
14

SqliteDictBuilder

A python script to build dictionary for Dictorium.
CSS
4
star
15

WDL

clone of http://www-dev.cockos.com/wdl/WDL.git
C
3
star
16

licecap

fork of http://www-dev.cockos.com/licecap/licecap.git
C++
3
star
17

uniqrcode

a chrome extension to generate QRcode and read QRcode via context menu locally
JavaScript
2
star
18

kv.crx

A chrome extension to use kv's http service to lookup word.
JavaScript
1
star
19

scriptbundle

a bundle of scripts
Perl
1
star