views:

964

answers:

3

I'm using Netbeans 6.7 and XDebug to debug a PHP site on my machine, launching the request from within Netbeans (Project->Debug). This works fine, and is very useful.

My question is: Is it possible to attach the debugger to any request that comes in, rather just those I launch from within Netbeans?

ie, instead of clicking "Debug", put Netbeans into a mode whereby the debugger is launched and attaches to the next request that comes in.

I have a feeling this may be a stupid question, but if it is possible, that'd be great.

Edit: A bit more information

My system (Ubuntu 9.04) is set up as follows:

Contents of /etc/php5/conf.d/xdebug.ini

zend_extension=/usr/lib/php5/20060613/xdebug.so

xdebug.remote_enable=on
xdebug.remote_handle=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.idekey=netbeans-xdebug

Netbeans PHP debugging options are at the defaults:

Debugger Port: 9000
Session ID: netbeans-xdebug
Stop at the First Line: ticked

My /etc/hosts file redirects www.mywebsite.com to localhost

If I click on the debug button in Netbeans, then Firefox is launched with the address http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, and the debugger works as expected.

But if I just browse to http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug, this doesn't start the debugger in Netbeans.

I've also tried setting xdebug.remote_host=www.mywebsite.com , but that makes no difference.

Also, I've enabled xdebug.remote_log, and that's showing information for when I start from within netbeans, but nothing for external requests. So I don't think XDebug is seeing the external requests at all.

A: 

Not sure about Netbeans, but any other IDE I have used is always listening for a debug connection. You can start a new debug session from xdebug by appending the query string ?XDEBUG_SESSION_START=name to the url. If Netbeans is listening, this should then kick off a new debug session.

See http://xdebug.org/docs/remote#browser%5Fsession for more details

timmow
Thanks for that, but it doesn't seem to work - it's like Netbeans can start the debugger itself, but it's not listening for external connections. Expanded my question a bit.
therefromhere
+2  A: 

go to project properties > run configuration > advanced > debug url and check do not open web browser (*). do not set the host under debugger proxy. save these settings. in the project window, on your project: right mouse click > debug (this starts listening for debug connections). no browser is started. enter http://www.mywebsite.com?XDEBUG_SESSION_START=netbeans-xdebug in your browser. it should break in netbeans. at least that's what happens here :)

(*) you might also have to set a path mapping - for me, it works without

ax
Excellent, that does the trick!
therefromhere
A: 

By default xdebug will not attempt to connect to the remote host when the 'XDEBUG_SESSION_START' Cookie/URL argument wasn't specified. You can enable xdebug to be "always on", by setting the xdebug.remote_autostart to 1 in the php.ini.

Furthermore, you would have to start the PHP debugger in NetBeans for this to work. I haven't found a better solution yet, but you can have the PHP debugger listening for incoming connections by starting to debug a random file (use CTRL+SHIFT+F5 to start debugging a file) and then continuing (by pressing F5) once it stopped at the breakpoint. The Netbeans debugger should run until you actually stop it.

Update: due to NetBeans checking the session id (XDEBUG_SESSION_START), you have to set the idekey variable too. eg:

xdebug.remote_autostart = 1
xdebug.idekey = "netbeans-xdebug"
Pada