Open main menu

Changes

1,089 bytes added ,  09:38, 23 October 2015
adds link to example
Debugging a PHP application can involve quite a bit of machinery, and effort getting that machinery setup. But it's worth it because what alternative is there? <code>echo</code>? Come on!
Thanks to [http://derickrethans.nl/who.html Derick Rethans], xdebug can do a ton of cool things for you. For example, it overloads <code>[https://secure.php.net/var_dump var_dump()]</code> and gives '''you''' [http://www.xdebug.org/docs/display control over how you want deeply nested data structures to be displayed].
 
Once you have NetBeans and XDebug operating, you can [[CiviCRM/debugging|debug complex applications like CiviCRM]]
== First get Xdebug setup ==
'''Extensions directory:''' /usr/lib/php5/20121212+lfs
</blockquote>
Caveat: their script the wizard can't really tell where the xdebug configuration lives(in the case of many subsidiary ini files). In Ubuntu, there might be a file in <code>/etc/php5/conf.d</code> In my case I actually did have <code>/etc/php5/conf.d/xdebug.ini</code>, but that file is superfluous because there are symbolic links for both '''apache2''' and '''cli''' that go to <code>/etc/php5/mods-available/xdebug.ini</code> (which helps PHP configuration to be the same for both runtimes.) Bottom line: run <code>locate xdebug.ini</code> to find out whether you have a duplicate/conflicting file; merge those files down to one; and make any overrides that you need from the default settings which xdebug will use if left unconfigured. Then <code>sudo service apache2 restart</code> and check your the output of <code>phpinfo() </code> for correctness.
The defaults are probably all good, but you many may want to specify some of the following:
<source lang="ini">
; the old one installed by apt-get;zend_extension=/usr/lib/php5/20090626+lfs/xdebug.sozend_extensionso; as of php 5.5 you no longer need to supply a full path to the zend_extension= token; but it doesn't hurt, and may be required if you have multiple .so files lying aroundzend_extension=/usr/lib/php5/20121212+lfs/xdebug.so
; enable debugging
xdebug.remote_host = "192.168.1.0/24,127.0.0.1"
; set which debug client protocol we want
xdebug.remote_handler = "dbgp"  ; enable anyone with access to the machine to start a debugging session; this setting also helps when you're having difficulty with the connection setup; xdebug.remote_connect_back 1
</source>
Once you see xdebug in your <code>phpinfo() </code> output, you know it's enabled -- which means that you can already get xdebug functionality out of your PHP scripts (e.g. var_dump() is overridden). But how do you get debugging working so that you can use it with your IDE? That is covered in the '[http://www.xdebug.org/docs/remote remote]' section of the manual. {{Highlight |text= If you want to use [https://secure.php.net/manual/en/opcache.installation.php OPcache] with Xdebug, you must load OPcache before Xdebug. In general, extensions are loaded in the order found in php.ini. See https://wiki.php.net/internals/extensions and [https://wiki.php.net/_detail/internals/extensions_lifetime.png?id=internals%3Aextensions this graphic] for more info}}
Following the sage advice of the [http://wiki.netbeans.org/HowToConfigureXDebug#General_Information Netbeans wiki], you want to get xdebug's '''debugclient''' working on localhost first, then add Netbeans.
[http://www.xdebug.org/docs/profiler Profiling] your PHP code is another feature enabled by xdebug.
 
== Resources ==
* http://www.devside.net/wamp-server/netbeans-waiting-for-connection-netbeans-xdebug-issue
4,558

edits