Debugging an RPC call in Zend Framework

Just a quickie.  Do you ever want to debug an RPC call to XML-RPC or Soap or something like that using Zend Studio/PDT and the Zend Debugger?  What I mean is debug the RPC call, not the request making the RPC call.  Doing that is actually quite simple.  I have some code here to share that I recently (as in 5 minutes ago, used).

$options = Zend_Registry::get('Zend_Application')->getOption('xmlrpc');
        $this->_xmlrpc = new Zend_XmlRpc_Client(
           $options['server']. '/service'
        if (false) {
            $http = $this->_xmlrpc->getHttpClient();
            $http->setCookie('start_debug', '1');
            $http->setCookie('debug_stop', '1');
            $http->setCookie('debug_fastfile' ,'1');
            $http->setCookie('debug_coverage' ,'1');   
            $http->setCookie('use_remote' ,'1');   
            $http->setCookie('send_sess_end' ,'1');
            $http->setCookie('debug_session_id' ,'2000');  
            $http->setCookie('debug_start_session' ,'1');
            $http->setCookie('debug_port', '10137');
            $http->setCookie('debug_host', '');

What this does is get the HTTP client from XML-RPC (or anything else that uses Zend_Http_Client) and adds a bunch of cookies as defined in the Zend Knowlege Base.  If I want to debug I just change the condition (if (false)) to true and re-run the request.  Since the Zend Debugger listens for cookies that are named like this, once it sees those cookies, the debug request will be initiated.

A few words on the ones you need to know:

  • start_debug – Tells the debugger to actually debug the request.  The debug session will not start without this.  Why not just run the request?  Because there’s also a start_profile which can be used to profile a request instead of debug it
  • debug_session_id – This is considered optional, but if you are getting an error saying that the protocol is wrong change this to a number that has not been used
  • debug_port – The port Zend Studio/PDT is listening on.  It’s probably 10137.
  • debug_host – The host that Zend Studio/PDT is on.  The debugger works by initiating a TCP connection back to Zend Studio and so this IP address ( or comma seperated list) is needed to tell the debugger where to go.

3 Thoughts to “Debugging an RPC call in Zend Framework”

  1. So where should I place this code?
    On the soap client side I reckon?

    I am in the process of trying to get debugging with breakpoints etc.. working for my local environment.

Leave a Reply

Your email address will not be published.