Question

Is it possible to configure the Zend PDT debugger in eclipse to hit a breakpoint from a browser action in a similar way to that of the Java debugger for eclipse? I.e. Set a breakpoint, start the debugger, browse a site then drop into a breakpoint when it is hit.

I can debug individual scripts and Web pages however I am trying to debug a script that is called from a webpage. I am using Joomla and want to be able to traverse the dependency stack while click on page content.

Thanks in advance for any advice..!

Was it helpful?

Solution

I found out how to do this but it is quite long winded. It enables you to debug PHP like you debug Java as in you can browser your site and only drop into the debugger when you hit one of your break points. Here's the config for Linux.

Installing Zend Debugger

First you will need to install and configure the Zend Debugger:

  • Ensure you have the Eclipse PDT (PHP Development Tools) installed. If not: Add this repository to your sources list in Help > Install New Software...: http://download.eclipse.org/releases/helios
  • Expand the Programming Languages package and select PHP Development Tools (PDT) SDK Feature.
  • Click next and install.
  • Install the Zend PDT in the same way by adding this repository to your sources list: http://downloads.zend.com/pdt
    • Expand Zend CE Features and select Zend Debugger Feature then click Next.
  • Restart Eclipse and then go to Window > Preferences > PHP > Debug > Installed Debuggers to ensure the Zend Debugger is installed.
  • Configure php.ini to point to the ZendDebugger.so file.

    • First type

      php5 -i | grep "Loaded Conf"

    into a terminal to find the correct php.ini file you need to edit and open it in a text editor

    • Next type

      locate ZendDebugger.so

    into a terminal and copy the location to the php5 Debugger file.

    • Add these lines to the bottom of your php.ini file:

      [Zend]
      Zend_extension="[path to your ZendDebugger.so file]"
      zend_debugger.allow_hosts="127.0.0.1, [your IP address if required]"
      zend_debugger.expose_remotely=always
      substituting in the path returned from your locate command and your IP address.

  • Restart PHP by typing

    sudo /etc/init.d/apache2 restart

    into a terminal.

  • Then type the

    php5 -m

    command into your terminal to ensure the Zend Debugger is properly configured. You will see something like:

    xmlreader
    xmlwriter
    Zend Debugger
    zip
    zlib

    [Zend Modules] Zend Debugger

    near the end of the dump. If you don't see the Zend Debugger then make sure you have edited the correct php.ini file and ensure that the path to your ZendDebugger.so file is valid. Make sure to restart PHP for any changes to propagate.

Configuring Eclipse

Next you will have to configure Eclipse:

  • Firstly go to Window > Preferences > PHP > PHP Executables and make sure the latest PHP CLI libraries are installed and set as default.
  • Next add the PHP Debugging perspective in eclipse by going to Window > Open Perspective > Other > PHP Debug.
  • Now go to Window > Preferences > PHP > Debug and click Configure Project Specific Settings.
  • Select the project you want to debug and click OK.

    • Check the Enable project specific settings.
    • These are the settings you will need:

    PHP Debugger: Zend Debugger
    Server: [local URL path to your project (should configure this in hosts file)]
    PHP Executable: 5.3.x (or later)

    Default Base URL / Base Path: /
    Auto-generated Base URL: http://[local URL path to your project]

    • Uncheck the Break at First Line option and click OK to close the config window, then uncheck the same option on the main PHP Debug page. Click Apply to save the settings.
  • Next go to Window > Preferences > PHP > PHP Servers and add a New server config with the URL

http://[local URL path to your project]

this should be the same URL as in your host config that you use in dev' to get to your home page. Give the config a name and set it as default. Click Finish and OK then restart Eclipse.

  • Next go to Window > Preferences > General > Web Browser, select Use external web browser and choose a browser you want to interact with during debugging. >Note:> DO NOT USE FIREFOX! The Zend PDT binds to it and you cannot decouple the browser from the debugger without uninstalling and reinstalling firefox. The Opera browser works by far the best with the Zend PDT so here's how to add it:
  • After installing the Opera browser go to the Window > Preferences > General > Web Browser settings again and select New and use these parameters:

    Name: Opera
    Location: /usr/bin/opera
    Parameter: %URL%

    click OK, select Firefox if it exists and remove it then check Opera and click OK.

  • Restart Eclipse again and you will be ready to start debugging PHP.

Using the Debugger

  • In the PHP perspective open a PHP file and select Debug as > PHP Web Page either from the Project menu or by selecting the downward arrow beside the Debug icon.
  • You may see an alert window asking you to confirm the debug URL. Remove eveything after the base URL to leave just:

    http://[local URL path to your project]

    as the URL and click OK.

  • If eclipse doesn't switch to the PHP Debug Perspective automatically then switch to it manually.

  • Go to your browser and navigate to the URL you configured above. You may need to run the debugger forward for the homepage to resolve. Sometimes you will need to refresh and run the debugger forward a couple of times before it fully binds your debug session.
  • You can navigate site normally and the debugger will drop into your code at breakpoints.

Troubleshooting

  • When the PHP debug session starts sometimes the session ends before the page loads and the page in the browser stays blank. Try right clicking the session in the debug stack view and select Relaunch.
  • When a debug session starts up first time make sure the URL in the browser window appears as the base URL you configured i.e. remove any debugger parameters that Zend appends to the URL. URLs should appear cleanly from now on.
  • For smoother debugging remove all terminated debugging sessions from the PHP Debug perspective before your finish your PHP development.
  • Be careful to avoid shutting eclipse down while the PHP Debug perspective is in focus as it will take a long time to close.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top