目录

  • 准备工作
  • 启用 XDebug
  • 如何使用 XDebug 进行 PHP 调试
  • 调试区域窗口
  • 调试会话
  • 样例调试会话
    • 使用其他监视
  • PHP 和 HTML 混合用例

要学习本教程,您需要具备以下软件和资源。

软件或资源
要求的版本

NetBeans IDE
PHP
PHP 引擎版本 5

Web 服务器
推荐使用 Apache HTTP Server 2.2。

PHP 调试器
XDebug 2.0 或更高版本

准备工作

要在适用于 PHP 的 NetBeans IDE 中成功调试 PHP 应用程序,您需要为进行 PHP 开发安装并配置 PHP 引擎、Apache 本地 Web 服务器和 XDebug 调试器。

启用 XDebug

安装 XDebug 后,您必须在 PHP 引擎中启用它。

启用 XDebug:

  1. 找到 PHP 引擎所使用的 php.ini 文件。如果运行 phpinfo(),此文件将显示在第一个表中的 "Loaded Configuration File"(已装入的配置文件)表头下。
  2. 在装入的 php.ini 中取消注释或添加以下行:
    zend_extension_ts="<path to the php folder>/php_xdebug-2.0.2-5.2.5.dll"
    xdebug.remote_enable=1
    xdebug.remote_host=127.0.0.1
    xdebug.remote_port=9000
    xdebug.remote_handler=dbgp

    有关如何配置 XDebug 的详细信息,请单击此处。
    注意:请确保您指定的路径与安装过程中所确定的相应文件的位置匹配。

  3. 如果使用 XAMPP 包,则需要禁用 Zend 优化器,因为它会阻止 XDebug。找到相关行,然后删除它们或将其标记为注释。
    注意:如果使用 XAMPP Lite,则需要对以下两个 php.ini 文件进行上述更改:

    • /xampplite/php/php.ini
    • /xampplite/apache/bin/php.in

如何使用 XDebug 进行 PHP 调试

如果在 php.ini 文件中启用了 XDebug,XDebug 便可以随时暂停和恢复 PHP 程序执行。当程序执行暂停时,XDebug 可以检索有关当前程序状态的信息,例如读取程序变量的值。实际上,此过程可以用下列工作流来表示:

  • 用户在 PHP 源代码执行应该暂停的行上设置一个断点。
  • 当到达此行时,用户按 F7 和 F8 键逐行执行脚本,并检查变量的值。

调试器窗口

启动调试会话时,将在主编辑器窗口下打开一组调试器窗口。要添加新窗口,请选择“窗口”>“调试”。可以使用下列窗口:

  • “局部变量”窗口,显示已初始化的变量及其类型和值的列表。
  • “监视”窗口,显示用户定义的表达式及其值的列表。
  • “调用栈”窗口,按倒序显示被调用函数的列表。最后调用的函数将显示在列表顶部。
  • “断点”窗口,显示设置了断点的行所在的文件以及行号的列表。
  • “会话”窗口,显示当前活动调试会话的列表。
  • “线程”窗口
  • “源”窗口
  • “HTTP 客户端监视器”窗口

调试会话

以下过程是典型调试会话的工作流。

运行调试会话:

  1. 启动 IDE,运行项目,然后打开包含要调试的源代码的文件。
  2. 将光标置于某一行上,您希望在该行之前自动执行 PHP 脚本。
  3. 要设置断点,请按 Ctrl-F8 组合键或选择“调试”>“开启/关闭行断点”。
  4. 在“项目”窗口中,导航至当前项目节点,单击鼠标右键,然后从弹出式菜单中选择“调试”。IDE 将打开调试器窗口并在调试器中运行该项目,直至到达断点为止。
    注意:如果当前项目设置为主项目,则可以选择“调试”>“调试主项目”,按 Ctrl-F5 组合键或单击 “调试主项目”按钮
  5. 切换至“局部变量”窗口。该窗口显示当前函数中已初始化的所有变量及其类型和值。
  6. 要查看该函数外部的变量值,请将光标置于此变量出现的某个位置上。工具提示会显示变量值。
  7. 要逐行(包括所有被调用函数中的行)执行程序,请按 F7 键或选择“调试”>“步入”,然后在“局部变量”窗口中监视这些变量值的更改。
  8. 要通过监视表达式的更改来检查程序逻辑,请定义一个新监视:
    1. 要打开“监视”窗口,请选择“窗口”>“调试”>“监视”,或按 Ctrl-Shift-2 组合键。将打开“监视”窗口。
    2. 在“监视”窗口中的任意位置单击鼠标右键,然后从弹出式菜单中选择“新建监视”。将打开“新建监视”窗口。
    3. 输入监视表达式,然后单击“确定”。 现在,您便可以在调试过程中进行其他检查。
  9. 要取消对某个函数中代码的逐行执行操作并跳至该函数调用后的下一行,请按 Ctrl-F7 组合键或选择“调试”>“步出”。
  10. 要跳过对某个函数中代码的逐行执行操作,获取该函数返回的值,并跳至该函数调用后的下一行,请按 F8 键或选择“调试”>“步过”。
  11. 要暂停调试会话,请选择“调试”>“暂停”。
  12. 要继续调试会话,请选择“调试”>“继续”或按 继续调试会话按钮
  13. 要取消调试会话,请按 取消调试会话按钮
  14. 在程序结束时,调试器窗口会关闭。

样例调试会话

此部分说明了一个标准的调试会话。

  1. 使用以下参数创建新的 PHP 项目:

    • 项目类型 - PHP 应用程序
    • 源位置 - htdocs 文件夹的缺省位置
    • 运行配置 - 本地 Web 站点

    有关设置 PHP 项目的更多详细信息,请参见设置 PHP 项目文档。

  2. 在项目创建完成后,将光标置于“源文件”节点上,从弹出式菜单中选择“属性”,然后打开“调试”窗口。选中“调试服务器端 PHP”复选框。
  3. 要在会话过程中使用热键,请将光标置于项目节点上,然后从弹出式菜单中选择“设置为主项目”。
  4. index.php 文件中,输入以下代码:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>NetBeans PHP debugging sample</title></head>
    <body><?php$m=5;$n=10;$sum_of_factorials = calculate_sum_of_factorials ($m, $n);echo "The sum of factorials of the entered integers is " . $sum_of_factorials;function calculate_sum_of_factorials ($argument1, $argument2) {$factorial1 = calculate_factorial ($argument1);$factorial2 = calculate_factorial ($argument2);$result = calculate_sum ($factorial1, $factorial2);return $result;}function calculate_factorial ($argument) {$factorial_result = 1;for ($i=1; $i<=$argument; $i++) {$factorial_result = $factorial_result*$i;}return $factorial_result;}function calculate_sum ($argument1, $argument2) {return $argument1 + $argument2;}
    ?></body>
    </html>

    该代码包含三个函数:

    • calculate_factorial () 函数
    • calcualte_sum () 函数
    • calculate_sum_of_factorials () 函数,该函数调用 calculate_factorial () 函数两次,再调用 calcualte_sum () 函数一次,然后返回计算的阶乘和。
  5. 在 PHP 块的开头设置一个断点 (Ctrl-F8):
    <?php
  6. 要启动调试,请单击 “调试主项目”按钮。调试器将在断点处停止。
  7. 按 F7 键三次。调试器将在调用函数 calculate_sum_of_factorials () 的行上停止。“局部变量”窗口会显示变量 $m$n 以及它们的值:
    调试器在函数调用处停止
  8. 要步入函数 calculate_sum_of_factorials (),请按 F7 键。调试器开始执行函数 calculate_sum_of_factorials () 中的代码,然后在函数 calculate_factorial () 的调用处停止。
    调试器在嵌入函数 calculate_factorial () 的调用处停止。
    现在,“局部变量”窗口将显示函数 calculate_sum_of_factorials () 中声明的局部变量 $argument1$argument2
    “局部变量”窗口显示在调用嵌入函数之前当前函数中的变量
  9. 按 F7 键。调试器开始执行函数 calculate_factorial () 中的代码。“调用栈”窗口将按倒序显示函数的调用栈,最后调用的函数位于列表顶部:
    “调用栈”窗口显示按倒序列出的三个函数调用。
  10. 按 F7 键步入循环。可在“局部变量”窗口中查看变量值。
    “局部变量”窗口显示变量。可检查循环是否正确。
  11. 如果您确定代码运行正常,请按 Ctrl-F7 组合键取消函数执行。程序将在调用函数 calculate_factorial () 后返回至下一行。
    注意:您也可以按 F7 键,直到程序执行完函数 calculate_factorial () 为止。您也会在调用该函数后返回至下一行。
    调试器在嵌入函数 calculate_factorial () 的第二次调用处停止。
  12. 由于您刚检查了函数 calculate_factorial (),并且确定其运行正常,因此可以跳过对该函数的再次执行操作(“步过”)。要步过该函数,请按 F8 键。程序将在函数 calculate_sum () 的调用处停止。
    调试器在嵌入函数 calculate_sum () 的调用处停止。
  13. 要步入函数 calculate_sum (),请按 F7 键。
  14. 要步过该函数,请按 F8 键。对于任何一种情况,调试器都会在函数 calculate_sum_of_factorials () 的最后一行停止。
    调试器在 calcualate_sum_of_factorials () 函数中的 return $result 语句处停止。
  15. 按 F7 键。调试器将移到 echo 语句所在的行上。
  16. 按 F7 键,直到调试器退出程序为止。将打开浏览器窗口并显示程序执行的结果:
    浏览器窗口中的程序执行输出。

使用其他监视

可以定义其他监视表达式来跟踪程序的执行。这有助于捕获错误。

  1. 按如下所示更新代码(将加号替换为减号):

    function calculate_sum ($argument1, $argument2) {return $argument1 - argument2;}

    假定运算符的改变是由于拼写错误造成的,而实际上您需要计算和。

  2. 选择“调试”>“新建监视”或按 Ctrl-Shift-F6 组合键。将打开“新建监视”窗口。
  3. 输入以下表达式,然后单击“确定”。
    $factorial1+$factorial2

    “监视”窗口中将显示新表达式。

  4. 运行调试会话。当调试器在以下行停止时
    return $result;

    将“监视”窗口中表达式的值与“局部变量”窗口中 $result 的值进行比较。它们应该相同,但在此示例中不同。
    使用监视捕获错误

此示例非常简单,它为您提供了使用监视的一些基本概念。

PHP 和 HTML 混合用例

您可以调试同时包含 PHP 块和 HTML 块的代码。在样例调试会话部分的示例中,对值进行了固定编码。现在,将通过用于输入值的 HTML 输入表单来扩展该代码。

  1. 在 <?php ?> 块的上方添加以下 HTML 代码:

     <form action="index.php" method="POST">Enter the first integer, please:       <input type="text" name="first_integer"/><br/>       Enter the second integer, please:       <input type="text" name="second_integer"/><br/>       <input type="submit" name="enter" value="Enter"/></form>

    有关详细信息,请参见 HTML 输入表单。

  2. 将 <?php ?> 块顶部的以下行:
    $m=5;$n=10;$sum_of_factorials = calculate_sum_of_factorials ($m, $n);echo "The sum of factorials of the entered integers is " . $sum_of_factorials;

    替换为以下代码:

    if (array_key_exists ("first_integer", $_POST) &&    array_key_exists ("second_integer", $_POST)) {$result = calculate_sum_of_factorials ($_POST["first_integer"], $_POST["second_integer"]);                echo "Sum of factorials is " . $sum_of_factorials;            }
  3. 在 <?php ?> 块的开头设置一个断点,然后启动调试会话。
  4. 按 F7 键。调试器将步入程序。同时,会打开浏览器窗口,但不显示输入表单。这是调试器的正确行为,因为它必须首先通过 Web 页的整个源代码,然后才能显示该页面。实际上,这意味着调试器通过了两次代码。第一次是调试器处理代码以显示 HTML 输入表单。第二次是调试器逐步执行 PHP 代码。
  5. 按 F7 键,直到调试器到达程序末尾并且打开输入表单为止。
  6. 填写该表单,然后单击 Enter 键。将继续调试会话(如样例调试会话部分中所述)。

转载于:https://www.cnblogs.com/huangjacky/archive/2010/12/30/1921636.html

PHP - NetBeans中调试PHP相关推荐

  1. [Android]反编译apk + eclipse中调试smali

    从来没有想过反编译apk是来的如此方便,并且还可以修改后重新编译运行,这比在win下修改pe容易多了,感谢apktool和smali工具的作者提供这么好的工具. 跟踪apk一般的做法是在反编译的sma ...

  2. netbeans php 断点调试,windows7 + iis7 + fastcgi + php5 + netbeans + xdebug 调试 php

    Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. windows7 + iis7 + fastcgi + php5 + netbe ...

  3. ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源

    ECLIPSE远程调试出现如下问题  ECLIPSE中调试代码提示找不到源 如此提示是由于没有JAR包中找不到MAIN,可以手动添加或自己修改 利用ECLIPSE填写JAR中的MAIN方法后,就可以调 ...

  4. pl sql如何调试oracle存储过程,PL/SQL Developer中调试oracle的存储过程

    作者:iamlaosong 唉,真土,之前用Toad,1直用dbms_output.put_line调试存储进程,只觉得不方便,用上PL/SQL Developer后,习惯性的还是用这个方法,人都是有 ...

  5. 【Windows 逆向】OD 调试器工具 ( CE 中获取子弹动态地址前置操作 | OD 中调试指定地址的数据 )

    文章目录 一.CE 中获取子弹动态地址前置操作 二.OD 中调试子弹数据 一.CE 中获取子弹动态地址前置操作 在上一篇博客 [Windows 逆向]OD 调试器工具 ( CE 工具通过查找访问的方式 ...

  6. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  7. 在VS中调试C#程序,如何查看内存、寄存器、反汇编

    在VS2005中调试C#程序时,有时你会想查看C#代码的汇编代码.内存情况.寄存器情况. 想查看反汇编代码,可在代码窗口中点右键->选择"转到反汇编"即可.在汇编代码窗口中, ...

  8. 天生一对Maven2+Jetty -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试...

    天生一对"Maven2+Jetty" -- Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试 Maven2代比1代改进很多,其中 ...

  9. 在Visual Studio中调试samples中可能出现的错误

    在Visual Studio中调试samples中可能出现的错误 进入samples/opencl文件夹下,打开OpenCLSamples.sln,然后选择" 生成 -> 重新生成解决 ...

最新文章

  1. 让你的javascript函数拥有记忆功能,降低全局变量的使用
  2. 电脑壁纸励志_励志壁纸 | 要乖 要长大 要努力 要不负众望
  3. 微服务怎么部署到服务器的_浅谈微服务部署方案
  4. java中将int类型数据存到数组中
  5. pyspark.zip/pyspark/worker.py:53: UnicodeWarning: Unicode equal comparison failed to convert both ar
  6. android访问java服务器_Android_post访问java服务器端
  7. 地图市场三足鼎立:诺基亚官方确认与亚马逊合作
  8. 程序员:你的效率可以提高三倍
  9. windows下搭建基于nginx的rtmp服务器
  10. 【java】创建一个窗口,统计输入内容
  11. ×××计算机信息系统安全保护条例
  12. Java数据库的JDBC编程
  13. 69个网盘搜索引擎资源(最全)
  14. 如何写好一个2Take1 Lua - 初步认识Lua
  15. 云计算技术文章的创作心得
  16. 【通信】通信网络基础分类
  17. android控制创维电视,创维电视怎么连接手机 创维电视连接手机的方法【详细介绍】...
  18. 原码一位乘、补码一位乘(校正法、布斯法)、补码两位乘
  19. 30岁程序员回顾人生、展望未来
  20. Ubuntu上安装fcitx五笔输入

热门文章

  1. csrf 攻击和防御
  2. [linux]解决vsftpd 读取目录列表失败的问题
  3. 移动端适配与响应式布局
  4. JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数...
  5. window.onload和$(document).ready()区别很大……
  6. iOS:Tools:快速注释Doxygen
  7. Windows窗体编程(二)
  8. PAT1066 Root of AVL Tree (25)(AVL树)
  9. C语言-数据数据类型、变量与常量
  10. HDU5320 : Fan Li