APD is the Advanced PHP Debugger. It was written to provide strace/truss capability for profiling and debugging php code, as well as providing the ability to print out a full stack backtrace. APD does supports interactive and non interactive debugging, by default it writes data to trace files. APD provides event based logging, so that varying levels of information (including function calls, arguments passed, timings, etc.) can be turned on or off for individual scripts.
APD is a Zend Extension, modifying the way the internals of PHP handle function calls, and thus may or may not be compatible with other Zend Extensions (for example Zend Optimizer).
Make sure you have installed the CGI version of PHP and it is available in your current path along with the phpize script.
Change into the source directory (either created from the downloaded TAR archive or from checking out CVS) and run the following commands:
./configure make install |
This automatically should install the 'php_apd' zend module into your php extensions directory directory. It isn't mandatory to have it there, in fact you can install it anywhere you care.
In your INI file, add the following lines:
zend_extension = /absolute/path/to/php_apd.so apd.dumpdir = /absolute/path/to/trace/directory |
Depending on your PHP build, the zend_extension directive can be one of the following:
zend_extension (non ZTS, non debug build) zend_extension_ts ( ZTS, non debug build) zend_extension_debug (non ZTS, debug build) zend_extension_debug_ts ( ZTS, debug build) zend_extension_debug = /absolute/path/to/php_apd.so |
This can either be an absolute path or a relative path. Relative means always relative to your where from you run your executeable.
*** NOTE ****************************************************************** * * If you're running the CGI version of PHP, you will need to add the '-e' * flag to enable extended information for apd to work properly: * * php -e -f script.php * *************************************************************************** |
To build APD under windows you need a working PHP compilation environment as described on http://php.net/ (basically, it requires you to have MSVC, win32build.zip and bison/flex and some know how about how to get it to work). Also make sure that adp.dsp has DOS line endings! If it has unix line endings, MSVC will complain about it.
You can use normal Windows path values for your php.ini settings:
zend_extension_debug_ts = c:\phpdev\php_apd.dll apd.dumpdir = c:\phpdev\traces |
In your PHP script, add the following line:
apd_set_session_trace(9); |
Now run your script.
The dump output will be writting to:
<apd.dumpdir>/apd_dump_<pid> |
The output itself will look something like:
16:37:51(george@wasabi)[~/src/apd]> cat /tmp/apd_dump_31994 APD - Advanced PHP Debugger Trace File --------------------------------------------------------------------------- Process Pid (31994) Trace Begun at Fri Aug 10 16:37:45 2001 --------------------------------------------------------------------------- ( 0.000000): apd_set_session_trace called at somewhere ( 0.001482): apd_set_session_trace() returned. Elapsed (997475865.364909) ( 0.001563): getcwd() /opt/apache/htdocs/a.php:4 ( 0.001628): getcwd() returned. Elapsed (0.000065) ( 0.001819): require() /opt/apache/htdocs/a.php:6 ++ argv[0] $(??) = /tmp/a.php ( 0.002231): getcwd() /tmp/a.php:3 ( 0.002290): getcwd() returned. Elapsed (0.000059) ( 0.002375): include_once() /tmp/a.php:4 ++ argv[0] $(??) = /tmp/aa.php ( 0.003276): include_once() returned. Elapsed (0.000901) ( 0.003334): require() returned. Elapsed (0.001515) ( 0.003381): require_once() /opt/apache/htdocs/a.php:7 ++ argv[0] $(??) = /tmp/aa.php ( 0.003515): require_once() returned. Elapsed (0.000134) ( 0.003564): include() /opt/apache/htdocs/a.php:8 ++ argv[0] $(??) = /tmp/b.php ( 0.003792): include() returned. Elapsed (0.000228) ( 0.018341): RSHUTDOWN called - end of trace --------------------------------------------------------------------------- Process Pid (31994) Trace Ended at Fri Aug 10 16:37:45 2001 --------------------------------------------------------------------------- |
If you have comments, bugfixes, enhancements or want to help developping this beast, you can send an mail to [email protected]. Any help is very welcome.