IntelliJ IDEA 2018.3 Help

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.

ps xdebug schema proxy

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

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.

  1. 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.

  2. 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: -d and -i.

    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 9000.

    pydbgpproxy -d 127.0.0.1:9001 -i 192.168.99.1:9000

    The DBGp proxy will confirm these settings when started:

    ps pdgp running

Make sure Xdebug is installed and configured on the web server

  1. Open the active php.ini file in the editor:

    1. In the Settings/Preferences dialog (Ctrl+Alt+S), click PHP under Languages & Frameworks.

    2. On the PHP page that opens, click browseButton next to the CLI Interpreter field.

    3. 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.

  2. 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

  1. In the main menu, select Tools | Xdebug Proxy | Register IDE.

  2. 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.

    ps pdgp register ide
  3. Click OK to connect to the specified proxy server. The server registers the credentials, and confirms the connection.

    ps pdgp register ide connected

    IntelliJ IDEA will notify about the successful connection, too.

    ps pdgp register ide successful
  4. To update the existing credentials, select Tools | Xdebug Proxy | Configuration in the main menu. In the Xdebug Proxy dialog that opens, edit the IDE key, the host, and the port settings.

    To discard the current credentials, select Tools | Xdebug Proxy | Cancel IDE Registration in the main menu.

Start a debugging session in the browser

  1. Make sure that the browser debugging extension that you are using is set to the registered IDE key:

    ps pdgp ide key
  2. In IntelliJ IDEA, enable listening to incoming debug connections by either clicking php icons debug listen off on the toolbar or selecting Run | Start Listening for PHP Debug Connections in the main menu. This will ensure IntelliJ IDEA reacts when a debugging session is started and opens the 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).

    Start the debugging session by refreshing the page in the browser.

    ps pdgp debugging started

Troubleshooting

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.

ps debug no mapping

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

  • Make sure that IntelliJ IDEA has been registered with the DBGp proxy, and it is listening for incoming debugger connections .

  • Make sure that the correct IDE key is set in IntelliJ IDEA and in the debugger bookmarklet or browser extension .

  • 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.0 as 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, select Tools | DBGp Proxy | Configuration... in 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 Languages & Frameworks | PHP | Debug page of the Settings/Preferences dialog (Ctrl+Alt+S).

Last modified: 7 December 2018

See Also