标签:
目录
要学习本教程,您需要具备以下软件和资源。
软件或资源 | 要求的版本 |
---|---|
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 正常工作,请参见 NetBeans XDebug Wiki,并/或通过 users@php.netbeans.org 咨询社区。
从 NetBeans IDE 中运行 XDebug 时,将在设置断点的每行暂停执行 PHP 程序。当程序暂停执行时,XDebug 可以检索有关当前程序状态的信息,如程序变量的值。实际上,此过程可以用下列工作流来表示:
有关在 NetBeans IDE 中使用 XDebug 的工作流详细信息,请参见调试会话。
NetBeans IDE 提供了一个调试工具栏,可帮助您逐步执行文件。请参见使用工具栏和编辑器。
NetBeans IDE 的 "Options"(选项)中包含一个标签,用于更改 PHP 调试的某些默认设置。要打开这些选项,请转至 "Tools"(工具)> "Options"(选项)(在 Mac 上则转至 "NetBeans" > "Preferences"(首选项)),然后依次选择 "PHP" 选项和 "Debugging"(调试)标签。
注:在 NetBeans IDE 版本 7.1 中引入了 "Debugging"(调试)标签。早期版本的 NetBeans 在 "General PHP"(常规 PHP)标签中具有调试选项。版本 7.1 中的部分选项在早期版本中不可用。
您可以在此面板中更改以下选项:
注:请设置 php.ini 文件中的 output_buffering = Off。否则,在 "Output"(输出)窗口中,将会延迟显示脚本输出。
就本教程而言,您不需要更改任何这些设置,除非选择性地启用监视。
可以使用编辑器来查看文件内容。因此,在进行调试时,编辑器以及调试器工具栏可为您提供在执行期间逐步执行代码的功能,以便查看文件内容如何影响在浏览器中执行的操作。
在运行调试会话时,将在编辑器上方显示调试器工具栏。
工具栏提供了以下操作:
完成会话 () | 完成调试会话 |
暂停 () | 挂起调试会话 |
恢复 () | 继续调试会话 |
步过 () | 越过执行语句 |
步入 () | 步入函数调用 |
步出 () | 步出当前函数调用 |
运行至光标位置 () | 运行至光标位置 |
在文件中设置断点,以便在执行期间通知调试器停止的位置。
重要提示:您必须在 PHP 代码中设置断点才能使用 XDebug。
要设置断点,请在编辑器中单击要设置断点的行的左旁注处。
可以通过单击断点标记 () 删除断点。
此外,还可以暂时禁用断点。要执行此操作,请右键单击断点标记,然后取消选中 "Breakpoint"(断点)> "?Enabled"(?启用)。这会将断点切换为禁用状态,从而导致一个灰色标记 () 显示在左旁注中。
如果调试器在执行时遇到断点,它将在断点处停止,以便您在调试窗口中检查变量,然后逐步执行断点后面的任何代码。
在调试会话期间挂起调试器时,可以在编辑器中将鼠标悬停在 PHP 标识符上以显示工具提示。如果该标识符在选定调用堆栈框架中有效,则会显示其值。此外,还可以选择 PHP 表达式。该表达式的值将显示在工具提示中。
启动调试会话时,将在主编辑器窗口下打开一组调试器窗口。在调试器窗口中,可以在逐步执行代码时跟踪变量和表达式值,检查执行线程的调用堆栈,验证源 URL 以及在会话之间切换(如果正在运行并发调试会话)。
可以从 IDE 的 "Window"(窗口)> "Debugging"(调试)菜单中访问所有调试器窗口。在调试会话处于活动状态后,便可以开始使用调试器窗口。
"Sessions"(会话)窗口显示当前处于活动状态的所有调试会话。在启动 PHP 调试会话时,可以在 "Sessions"(会话)窗口中看到 PHP 调试器条目。
NetBeans IDE 还允许同时运行多个调试器会话。例如,可以同时调试 Java 和 PHP 项目。在这种情况下,可以标识在 "Sessions"(会话)窗口中列出的两个会话。
当前会话(即您可使用调试器工具栏控制的会话)由更为醒目的图标 () 指示。要切换会话,您可以双击要激活的会话,或者右键单击非当前会话,然后选择“激活”。
注:如果挂起了当前所在的会话,建议您不要切换会话。
您还可以使用右键单击弹出式窗口终止会话(单击鼠标右键,然后选择 "Finish"(完成)),或者在调试会话中的当前线程或调试所有线程之间切换(单击鼠标右键,然后选择 "Scope"(范围)> "Debug All Threads"(调试所有线程)或 "Debug Current Thread"(调试当前线程))。
在挂起调试器后,"Variables"(变量)窗口将显示选定调用堆栈框架的当前 window
对象的变量。在当前窗口中,将显示每个变量的节点。超全局变量按单独的节点进行分组。
在逐步执行代码时,某些局部变量的值可能会发生变化。此类局部变量以粗体显示在 "Local Variables"(局部变量)窗口中。您也可以直接单击 "Values"(值)列并手动更改变量值。
设置监视会导致 XDebug 不稳定,因此不建议这样做。默认情况下,将禁用监视。不过,如果要设置监视,请参见使用其他监视。
"Call Stack"(调用堆栈)窗口列出了在执行期间进行的调用序列。在挂起调试器时,"Call Stack"(调用堆栈)窗口将显示函数调用序列(即调用堆栈)。在初次暂停时,将会自动选择最顶部的堆栈框架。在该窗口中双击函数调用,即可在编辑器中转至该行。如果对 PHP 类进行调用,则在双击该调用时,"Navigator"(导航器)窗口也将转至该行。
可以双击某个调用堆栈框架将其选中,然后在 "Variables"(变量)和 "Watches"(监视)窗口中查看该框架的任何变量或表达式值。
"Threads"(线程)窗口中会指出哪个 PHP 脚本当前处于活动状态,以及是在断点处挂起还是处于运行状态。如果该脚本处于运行状态,则需要转至浏览器窗口,并与该脚本进行交互。
"Sources"(源)窗口显示为调试会话加载的所有文件和脚本。对于 PHP 项目,"Sources"(源)窗口当前不起作用。
可以使用 "Breakpoints"(断点)窗口来查看在 IDE 中设置的所有断点。
通过 "Breakpoints"(断点)窗口,可以在 "Context"(上下文)窗口中启用或禁用断点。此外,还可以创建断点组。
以下过程是典型调试会话的工作流。
运行调试会话:
现在,您便可以在调试过程中进行其他检查。
重要提示:您必须在 PHP "Options"(选项)的 "Debugging"(调试)标签中启用监视才能设置监视。
在程序结束时,调试器窗口会关闭。
本部分中的样例说明了基本的调试器函数,包括步入和步过函数。此外,还显示了典型的调试器窗口输出。
<!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>
<?php
可以定义其他监视表达式来跟踪程序的执行。这有助于捕获错误。
警告:设置其他监视会导致 XDebug 不稳定。默认情况下,将禁用监视,请参见调试选项。
function calculate_sum ($argument1, $argument2) {假定运算符的改变是由于拼写错误造成的,而实际上您需要计算和。
return $argument1 - argument2;
}
$factorial1+$factorial2"Watches"(监视)窗口中将显示新表达式。
return $result;将 "Watches"(监视)窗口中表达式的值与 "Local Variables"(局部变量)窗口中 $result 的值进行比较。它们应该相同,但在此示例中不同。
您可以调试同时包含 PHP 块和 HTML 块的代码。在样例调试会话部分的示例中,对值进行了固定编码。现在,将通过用于输入值的 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 输入窗体。
$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 " . $result;
}
可以调试脚本和 Web 页,还可以在本地或远程调试 Web 页。遗憾的是,对于远程调试,在远程服务器上调试的 PHP 文件与在本地计算机上运行的 NetBeans IDE 中打开的文件并不相同。因此,NetBeans 中的调试器支持必须能够将服务器路径映射到本地路径。然而,由于存在诸多复杂因素,无法针对各种情况自动解决路径映射问题。因此,从 NetBeans 6.7 开始,您可以通过项目设置针对各个运行配置手动定义路径映射。此外,还可以指定代理服务器(如果有),以及在其上启动调试会话的 URL。如果未指定此 URL,则将从索引文件开始执行调试。
设置路径映射并启用定制调试 URL:
有关详细信息,请参见 "NetBeans for PHP"(NetBeans PHP) 博客中的 Path Mapping in PHP Debugger(使用 PHP 调试器进行路径映射)的帖子。
要发送意见和建议、获得支持以及随时了解 NetBeans IDE PHP 开发功能的最新开发情况,请加入 users@php.netbeans.org 邮件列表。
标签:
原文地址:http://www.cnblogs.com/longerhe/p/5117199.html