I contacted the main developper of Geany to ask him if integrating a PHP Debugger in Geany was planned. Unfortunately, there is no plans for this. I would like to have this in Geany since it is the only primary thing that prevent Geany from beeing a major PHP IDE to my opinion. It has many advantages over other IDE's i used for PHP : straight foward & simple, fast, lightweight, not too many dependencies (easier for cross platform), fit for more than one language.. etc. I think you know the advantages....
I have basic knowledge in C++ so i don't think I would be able to do it myself but with some help I would be glad to participate in this project if someone is willing to this.
However, here are some explanations on how a debugger works, what work should be done to integrate this into Geany
First of all, a PHP debugger is an extension your load in the php.ini file on your PHP developement server as usual extention for PHP. There are mainly 3 debuggers available for free to install on your web server :
- xdebug (free open source) http://xdebug.org/ - zend debugger (free, not open source) - DBG (free open source) : http://sourceforge.net/projects/dbg2
These debuggers opens a port on your test server ie. Zend Debugger (the one I used the most) opens normally port 10000. It uses this port to communicate with the app ie. Geany (with the client debugger running in BG) to listen to where breakpoints should be. It also sends stack information, current line, current file, etc. like a normal debugger would.
On unix, a PHP debugger is normally a .so file (shared object). On windows, a DLL file. The .so or .dll file must match the PHP version you are using. Only the main version and sub version must match. ie PHP 5.2.25 would need a debugger named xxx.5.2.so for unix/linux. This is for the server part. Not all debuggers provides different versions for different versions of PHP... DBG for example supports all major PHP versions with the same DLL or .SO. Zend however do provide different DLL or SO for all PHP versions
I dont know the internal mechanics of the debugger but I know how to install it. However, the free debugger DGB would be a nice way to introduce PHP debug into Geany since it is open source. Also, PDT for eclipse supports Zend Debugger and I'm pretty sure it is open source (so is Eclipse!) so we can see how to do it (unfortunately in java..so a bit of java understanding is needed here).
In order to add this functionnality in geany, these must be implemented :
- A communication channel between the debugger & Geany.
Perhaps there is a client & server part for each debugger. In DBG, a command line utility is available to debug a page without an apache server.
Starting to debug a page on apache server is done this way by url call: http://myhost/mydir/myscript.php?DBGSESSID=1@clienthost:7869 Just appending the green part to the url fires up the debugger... or by the commandline this way : dbg
set mode on set mapurlroot http://localhost/ set mapremoteroot /usr/local/apache/htdocs/ set maplocalroot /usr/local/apache/htdocs/ file /usr/local/apache/htdocs/myfile.php run break /usr/local/apache/htdocs/myfile.php:12 cont
DBG have a DBG-cli as a client you can capture command line output in Geany & interract with the debugger in background. Communication between app & debugger may vary from one to another... not sure it is always as DBG does...
- Stack pannel : Displays variables values, expandable object structures & values within objects, ... - Watch pannel : displays infos about a variable each time it encounters a breakpoint. - Local stack (normally presented as thumbs in the same pannel as stack. - Output view (optionnal but useful) - Errors view... the errors PHP encounters while parsing the page. - A browser plugin for firefox (similar to zend toolbar, a must have. I guess I could do that, its in XML... so I'm ok with this !). This plugins allows a browser to start a debugging process & opens the file in Geany. - A debugger configuration dialog. Sets the base path of the server so files are converted tu urls by the app when you start debug from the app. - A setting to automatically add breakpoints on first line & ending line of a script. - A clear all breakpoints setting - A clear all breakpoints in project setting - A test debug connection functionnality (tells if the debugger works) - A port setting to change the port used (don't know how this might work...) - The ability to bind a key combination to hide all debugger pannels (they take a lot of screen space and have to be showed & hidden often)
In the edit area : - Clicking on a line number toggles a breakpoint. Normally visible by changing bg color of that line. - When a breakpoint is reached, the BG color of that line must change to something really visible. - As PHP debugger goes into included files, files containing a breakpoint should automatically open & have focus - While debugging is stopping on a breakpoint, you should be able to add other breakpoints in any file live (without restarting debugger)
I know that the app ie Geany has to controls the debugger. For example you normally have a play button, a step into, step out & a stop buttons to control debug progression. The app must send a signal to the debugger port/or hidden commandline to tell continue to it. In DBG it is a command issued on the command line in an hidden shell...
I'm pretty sure all the vars are not queryed by the app. Ie. the app dont know which vars should be in the stack. Instead the debugger send all vars & values to the app. & the app displays them blindly.
* For local & general stack views, I think the app must do something for this... I'm presuming the app must know in which object/function we are and filter the stack data to reflect the local view... not sure after reading a bit on DGB thought.
* I never looked into a debugger code neigther I unsterstand how the communication works between the app & debugger so I am making assumptions here (where there is a * before a line)...
Other infos you might find useful :
- I never saw a PHP debugger run fast. Is is all slow, I suspect the debuggers from being coded in an awful way... - Only one debugger can run on a PHP install. That means that if you install one by loading the extension in your PHP.ini file, you have to remove it & load the extension for the second, then restart apache to make it work. - Zend Debugger : I came across a couple of innacuracies with Zend Debugger particularly in complex PHP apps. A script was not working, a bug in there somewhere maked it stop. I debugged this script with Zend and it passed throught it without an error. So I am suggesting to take another debugger than that one or add multiple debuggers possibility to Geany (this feature is not present in any IDE I saw, would be nice thought). - There is a toolbar for firefox to use with DBG debugger (from NuSphere) so this a bit less work ! - DBG is free and has been in the market for a long time... as long as Zend Debugger. - xDebug is fairly new - I heard bad & good comments with xDebug but never tried it. Seems like it is not ready for stability & accuracy yet. However it may have evolved since these comments.
That is all I can think of right now...
I'll check if I can find a more in depth doc about how to communicate with a debugger in the point of view of Geany. There is a brief view of how to communicate with the debugger in the DBG CLi sources in the readme file...
I attached you DBG C++ source code so you can see by yourself... Included DBG CLI (client commandline) & DBG (server part)
Let me if someone is interested in doing this plugin for geany... I personnaly would choose DBG for the debugger but that should be more discussed before doing anything.