Multiuser Debugging via Xdebug Proxies
When you start a debugging session, the Xdebug extension connects to the IP address IntelliJ IDEA is running at, specified as the
xdebug.remote_host value. IntelliJ IDEA accepts this connection and can communicate with Xdebug over it. Xdebug only supports connecting to a single IP address, and does not automatically connect back to the IP address that runs the browser because of security reasons. To debug PHP applications in multiuser environments, Xdebug offers a so-called DBGp proxy.
When a proxy is used, the PHP Xdebug extension no longer connects to IntelliJ IDEA directly, but instead connects to the DBGp proxy server. All developers in the team, in turn, then connect to that proxy. Each developer has a separate debugging session running over this proxy, which makes it possible to do multi-user debugging of the same code on the same server.
Configuring multiuser debugging via an Xdebug proxy (DBGp) server
To configure multiuser debugging via an Xdebug proxy (DBGp) server, perform the following general steps:
- Download and install a DBGp proxy
- Make sure Xdebug is installed and configured on the web server
- Configure access to the DBGp proxy server from IntelliJ IDEA
- Start a debugging session in the browser
Download and install a DBGp proxy
To be able to start a debugging session, you'll need to have a DBGp proxy running on a server that can be reached by the web server itself as well as all developer machines. We can install the proxy on the web server, on a machine in the same network, or a machine accessible via an SSH tunnel.
On the Komodo downloads page, you can find the DBGp proxy platform-specific Python binaries. Download the required package and run the pydbgpproxy or pydbgpproxy.exe file.
Start the DBGp proxy either on the web server or on a machine that can communicate both with the web server and all developer machines. The DBGp proxy executable accepts two arguments:
The arguments define which IP address and port to listen for debugger connections from the web server and on which IP address and port to listen for developers.
As an example that listens for debugger connections on the loopback address (
127.0.0.1) and port
9001, and listens for developers on the machine IP address and port
pydbgpproxy -d 127.0.0.1:9001 -i 192.168.99.1:9000
The DBGp proxy will confirm these settings when started:
Make sure Xdebug is installed and configured on the web server
Open the active php.ini file in the editor:
In the Settings/Preferences dialog (Ctrl+Alt+S), click PHP under Languages & Frameworks.
On the PHP page that opens, click next to the CLI Interpreter field.
In the CLI Interpreters dialog that opens, the Configuration File read-only field shows the path to the active php.ini file. Click Open in Editor.
Make sure that at least the following settings are specified:
[xdebug] zend_extension=xdebug_module_goes_here xdebug.remote_enable=1 xdebug.remote_host=dbgp_proxy_hostname_or_ip xdebug.remote_port=9001
For details on configuring Xdebug, refer to Configuring Xdebug
Configure access to the DBGp proxy server from IntelliJ IDEA
In the main menu, select.
In the Xdebug Proxy dialog that opens, specify the IDE key value (this should be a unique value for each developer, as it identifies the debugging session), the host and port of the Xdebug proxy server.
Click OK to connect to the specified proxy server. The server registers the credentials, and confirms the connection.
IntelliJ IDEA will notify about the successful connection, too.
To update the existing credentials, select Xdebug Proxy dialog that opens, edit the IDE key, the host, and the port settings.in the main menu. In the
To discard the current credentials, selectin the main menu.
Start a debugging session in the browser
Make sure that the browser debugging extension that you are using is set to the registered IDE key:
In IntelliJ IDEA, enable listening to incoming debug connections by either clicking on the toolbar or selecting Debug tool window automatically. Before launching the script, make sure that either a breakpoint is set or the Break at first line in PHP scripts option is enabled on the Debug page of the Settings/Preferences dialog (Ctrl+Alt+S).in the main menu. This will ensure IntelliJ IDEA reacts when a debugging session is started and opens the
Start the debugging session by refreshing the page in the browser.
Remote file path is not mapped to any file path in project
In some cases, the debugger can connect, but we get the error messages indicating that no mapping between the remote and project files is defined. This means that IntelliJ IDEA cannot determine which local file corresponds to the file being debugged.
We can solve this problem by clicking Click to set up path mappings and providing the necessary path mappings.
Additionally, we can configure these mappings using the techniques outlined in Configuring Synchronization with a Web Server.
No connection could be made because the target machine actively refused it
Is there a firewall blocking connections to the DBGp proxy? If so, make sure the PHP Xdebug extension can connect to it, as well as the developer machines. You can use http://canyouseeme.org or a similar service to check for opened inbound ports.
Is there a firewall blocking connections to the IDE? Make sure that IntelliJ IDEA can be connected to from the DBGp proxy machine. You can use http://canyouseeme.org or a similar service to check for opened inbound ports.
The DBGp proxy application binds to the wrong IP address. Run it using
0.0.0.0as the address so it binds to any IP address on the DBGp proxy server. For example, run
pydbgpproxy -i 0.0.0.0:9001 -d 0.0.0.0:9000.
When testing multi-user debugging in IntelliJ IDEA with Xdebug and DBGp proxy installed on the same machine, there are some additional things to verify:
IntelliJ IDEA binds to the wrong IP address. When a DBGp proxy runs on a local machine where IntelliJ IDEA is also being run, the IDE may be using the wrong network subnet. To fix this, selectin the main menu and set DBGp proxy server IP address to
0.0.0.0. Then, try re-registering IntelliJ IDEA with the DBGp proxy.
A port conflict exists. When testing DBGp on a local machine, both IntelliJ IDEA and DBGp may want to bind to the same port. Make sure this is not the case by either configuring DBGp to use a different port or changing the IntelliJ IDEA's Xdebug port on the Settings/Preferences dialog (Ctrl+Alt+S).page of the