APD 是高级 PHP 调试器(的缩写)。它用于提供定型和调试 PHP 代码的 strace/构建能力,同时也提供输出详尽反向跟踪报告的能力。 APD 同时支持交互式与非交互式调试,并且缺省情况下会提供跟踪报告。APD 提供基于事件的日志,因此针对个别代码可以设置是否启用多种级别的信息(包括函数调用、变量传递、时间选择等)。
APD 是一个 Zend 扩展,用于修改 PHP 内部函数调用管理方式。所以可能不一定兼容其它 Zend 扩展(例如 Zend Optimizer )。
确信你已经安装了 CGI 版的 PHP 并且当前位于 PHP 路径下。
转入源代码目录 (如果没有源代码目录可以从 PHP 官方的 CVS 下载 TAR 存档创建) 运行以下命令:
./configure make install |
随后应该会自动安装 'php_apd' zend 模块到你的 php 扩展目录所在的目录。并非必须要安装在此目录,事实上你可以安装在任何你想的目录下。
将以下代码加入你的 PHP.ini 中:
zend_extension = /absolute/path/to/php_apd.so apd.dumpdir = /absolute/path/to/trace/directory |
根据不同的 PHP 构架需求,你可以将 zend_extension 指示设为以下的任何一种:
zend_extension (无 ZTS,无调试构架) zend_extension_ts (有 ZTS,无调试构架) zend_extension_debug (无 ZTS,有调试构架) zend_extension_debug_ts (有 ZTS,有调试构架) zend_extension_debug = /absolute/path/to/php_apd.so |
这可以是一个相对或绝对路径, (设置为)相对(路径)意味着总是相对你运行可执行程序所在的路径。
*** 注释 ****************************************************************** * * 如果你运行的是 CGI 模式的 PHP,你需要加上 '-e' * 标记用于提供扩展信息使 apd 正常工作: * * php -e -f script.php * *************************************************************************** |
要在 windows 环境下建立 APD 你需要一个如 http://php.net/ (基本的,你需要 MSVC,win32build.zip 和 bison/flex 和其它你知道可以让它工作起来的方法)所描述的 PHP 编译工作环境。而且也应确认 adp.dsp 有 DOS 尾行!如是以 Unix 行结尾, MSVC 将不会编译它。
在你的 php.ini 设置中你可以使用 Windows 路径:
zend_extension_debug_ts = c:\phpdev\php_apd.dll apd.dumpdir = c:\phpdev\traces |
在你的 PHP 代码中加入如下代码行:
apd_set_session_trace(9); |
现在运行你的代码。
堆存输出将被写到:
<apd.dumpdir>/apd_dump_<pid> |
输出看起来将如下所示:
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 --------------------------------------------------------------------------- |
你有任何评论、错误更正、优化项或希望参与此开发请发送 mail 到 apd@mail.communityconnect.com 。欢迎任何形式的帮助!