Debug php in emacs with geben
While PHP-developing it sometimes is just too tedious to do those ‘add a echo here and there, then reload and search the echoed strings on the screen’-loops. So I searched for a debugger for my favourite editor emacs. After a lengthy install procedure I finally got it running: With geben on emacs you can debug PHP (step through and evaluate expressions)

geben in action
Installation
Install xdebug php5-module
get xdebug for php (See “xdebug für ubuntu (german)”)
sudo pecl install xdebug
→ File lies at /usr/lib/php5/20060613+lfs/xdebug.so
edit php.ini (see “easy php debugging using debug and vim”)
Put these under “Module Settings”:
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so [debug] ; Remote settings. Adapt if you're not running apache on localhost xdebug.remote_autostart=off xdebug.remote_enable=on xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=localhost xdebug.remote_port=9000
Restart apache:
/etc/init.d/apache2 restart
Install required packages
Unfortunately, geben doesn’t work with the ubuntu “gutsy gibbon” packages. So do not do apt-get eieio. Instead: download cedet and eieio from cedet.sourceforge.net and copy both into ~/elisp/
cd ~/elisp/ tar -xzvf *.tar.gz cd cedet* make cd ../eieio* make
add this to .emacs:
(add-to-list 'load-path "~/elisp/eieio-0.17") (load-file "~/elisp/cedet-1.0pre4/common/cedet.el")
get debugclient from http://xdebug.org/ (currently: this file)
rename it to debugclient and move to /usr/local/bin/
install geben
download geben from http://trac.sakura.ne.jp/geben/
unpack it into ~/elisp/
add this to your .emacs-file:
(add-to-list 'load-path "/home/phred/elisp/geben") (add-to-list 'load-path "/home/phred/elisp/geben/gud")
Usage
Restart emacs. Type alt-x geben. Load the script you want to debug in firefox with ?XDEBUG_SESSION_START=1 appended
Voilà, that’s it. After pressing space to ‘activate’ geben you can use this keys:
spc step into/step over i step into o step over r step out b set a breakpoint at a line u unset a breakpoint at a line g run e eval expression (to inspect variables: best is probably print_r($this, true)) q stop debugger
Update: After some usage it bugged me to always type print_r($var, true) to inspect a variable. And then, the print_r-output is cut after 1024 chars. Knowing absolutely nothing about lisp I did some very lame changes to the geben code.
With these changes I’m able to type ‘E’ and then write $variable and geben writes all the output to the message-buffer. Download the diff and patch the geben-sourcecode with
patch -i geben.diff

3 Kommentare
15. Aug 2008, 11:33
At the beginning of this blog post is a picture pointing to the .diff; MSIE is teh good boy this time and shows it.
Cheers,
15. Aug 2008, 12:34
Hi Yoan
thanks for the hint. I’ve fixed it. Yes, IE sometimes even has advantages :-)
25. Aug 2011, 04:28
Following my analysis, thousands of people all over the world get the business loans at good banks. Therefore, there’s good possibilities to find a term loan in all countries.
Sorry, comments for this entry are closed at this time.