在NetBeansIDE中调试PHP源代码
⽬录
要学习本教程,您需要具备以下软件和资源。
软件或资源要求的版本
PHP 下载包
PHP 引擎版本 5
Web 服务器推荐使⽤。
PHP 调试器
准备⼯作
要在适⽤于 PHP 的 NetBeans IDE 中成功调试 PHP 应⽤程序,您需要 PHP 引擎、Apache 本地 Web 服
务器和 XDebug 调试器。如果您难以使 XDebug 正常⼯作,请参见,并/或通过 咨询社区。
如何在 NetBeans IDE 中使⽤ XDebug 进⾏ PHP 调试
从 NetBeans IDE 中运⾏ XDebug 时,将在设置断点的每⾏暂停执⾏ PHP 程序。当程序暂停执⾏时,XDebug 可以检索有关当前程序状态的信息,如程序变量的值。实际上,此过程可以⽤下列⼯作流来表⽰:
1. 在应暂停执⾏ PHP 源代码的每⾏设置断点。
2. 启动调试会话。
3. 当到达包含断点的⾏时,可以按 F7 和 F8 键,以逐⾏执⾏脚本。在中监视应⽤程序的状态。
4. 关闭调试会话。
有关在 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 中的部分选项在早期版本中不可⽤。
"Options"(选项)中的 "Debugging"(调试)标签:PHP
您可以在此⾯板中更改以下选项:
Debugger port(调试器端⼝)。这是 XDebug 使⽤的端⼝,如 php.ini 中所设置。默认情况下为端⼝ 9000。此对话框中的端⼝号必须与您在 php.ini 中设置的调试器端⼝相同。在此对话框中,不能改动 XDebug 使⽤的端⼝。只能将 XDebug 使⽤的端⼝通知 NetBeans IDE。
Session ID(会话 ID)。调试会话的任意名称。默认情况下为 netbeans-xdebug。如果需要设置 php.ini 中的xdebug.idekey属性(如在某些远程调试情况下),则必须注意该值。
Stop at First Line(在第⼀⾏停⽌)。勾选此选项时,调试器会话在代码的第⼀⾏停⽌,⽽不在第⼀个断点处停⽌。在启动调试会话时,该选项可使您的屏幕⼀直居于 IDE 中,⽽不切换⾄浏览器窗⼝。
Watches and Balloon Evaluation(监视和⽓球式求值)。默认情况下,将禁⽤监视和⽓球式求值。监视和⽓球式求值会导致 XDebug 不稳定。
Maximum Depth of Structures(最⼤结构深度)。设置嵌套结构(如嵌套数组、对象中的对象等)的可视性
Maximum Number of Children(最⼤⼦项数)。设置监视求值期间数组项的可视性。(如果将 "Maximum Number of Children"(最⼤⼦项数)设置为 1,则只会看到数组中的第⼀项,即使该数组有多个项也是如此。)
Show Requested URLs(显⽰请求的 URL)。调试期间打开新的 "Output"(输出)窗⼝。此 "Output"(输出)窗⼝名为 "PHP Requested Urls"(PHP 请求的 URL),它会显⽰当前处理的 URL。这些 URL 是可单击的。在 "Output"(输出)窗⼝中单击 URL,以便在浏览器窗⼝中打开该 URL。
PHP Debugger Console(PHP 调试器控制台)。打开显⽰已调试脚本输出的新 "Output"(输出)窗⼝。
注:请设置php.ini⽂件中的output_buffering = Off。否则,在 "Output"(输出)窗⼝中,将会延迟显⽰脚本输出。
就本教程⽽⾔,您不需要更改任何这些设置,除⾮选择性地启⽤监视。
使⽤⼯具栏和编辑器
可以使⽤编辑器来查看⽂件内容。因此,在进⾏调试时,编辑器以及调试器⼯具栏可为您提供在执⾏期间逐步执⾏代码的功能,以便查看⽂件内容如何影响在浏览器中执⾏的操作。
使⽤调试器⼯具栏
在运⾏调试会话时,将在编辑器上⽅显⽰调试器⼯具栏。
⼯具栏提供了以下操作:
完成会话 ()完成调试会话
暂停 ()挂起调试会话
恢复 ()继续调试会话
步过 ()越过执⾏语句
步⼊ ()步⼊函数调⽤
步出 ()步出当前函数调⽤
运⾏⾄光标位置 ()运⾏⾄光标位置
设置断点
在⽂件中设置断点,以便在执⾏期间通知调试器停⽌的位置。
重要提⽰:您必须在 PHP 代码中设置断点才能使⽤ XDebug。
要设置断点,请在编辑器中单击要设置断点的⾏的左旁注处。
php文件下载源码可以通过单击断点标记 () 删除断点。
此外,还可以暂时禁⽤断点。要执⾏此操作,请右键单击断点标记,然后取消选中 "Breakpoint"(断点)> "✔Enabled"(✔启⽤)。这会将断点切换为禁⽤状态,从⽽导致⼀个灰⾊标记 () 显⽰在左旁注中。
如果调试器在执⾏时遇到断点,它将在断点处停⽌,以便您在调试窗⼝中检查变量,然后逐步执⾏断点后⾯的任何代码。
检查⼯具提⽰
在调试会话期间挂起调试器时,可以在编辑器中将⿏标悬停在 PHP 标识符上以显⽰⼯具提⽰。如果该标识符在选定调⽤堆栈框架中有效,则会显⽰其值。此外,还可以选择 PHP 表达式。该表达式的值将显⽰在⼯具提⽰中。
调试器窗⼝
启动调试会话时,将在主编辑器窗⼝下打开⼀组调试器窗⼝。在调试器窗⼝中,可以在逐步执⾏代码时
跟踪变量和表达式值,检查执⾏线程的调⽤堆栈,验证源 URL 以及在会话之间切换(如果正在运⾏并发调试会话)。
可以从 IDE 的 "Window"(窗⼝)> "Debugging"(调试)菜单中访问所有调试器窗⼝。在调试会话处于活动状态后,便可以开始使⽤调试器窗⼝。
"Sessions"(会话)窗⼝
"Sessions"(会话)窗⼝显⽰当前处于活动状态的所有调试会话。在启动 PHP 调试会话时,可以在 "Sessions"(会话)窗⼝中看到 PHP 调试器条⽬。
NetBeans IDE 还允许同时运⾏多个调试器会话。例如,可以同时调试 Java 和 PHP 项⽬。在这种情况下,可以标识在 "Sessions"(会话)窗⼝中列出的两个会话。
当前会话(即您可使⽤调试器⼯具栏控制的会话)由更为醒⽬的图标 () 指⽰。要切换会话,您可以双击要激活的会话,或者右键单击⾮当前会话,然后选择“激活”。
注:如果挂起了当前所在的会话,建议您不要切换会话。
您还可以使⽤右键单击弹出式窗⼝终⽌会话(单击⿏标右键,然后选择 "Finish"(完成)),或者在调试会话中的当前线程或调试所有线程之间切换(单击⿏标右键,然后选择 "Scope"(范围)> "Debug All Threads"(调试所有线程)或 "Debug Current Thread"(调试当前线程))。
"Variables"(变量)窗⼝
在挂起调试器后,"Variables"(变量)窗⼝将显⽰选定调⽤堆栈框架的当前window对象的变量。在当前窗⼝中,将显⽰每个变量的节点。超全局变量按单独的节点进⾏分组。
在逐步执⾏代码时,某些局部变量的值可能会发⽣变化。此类局部变量以粗体显⽰在 "Local Variables"(局部变量)窗⼝中。您也可以直接单击 "Values"(值)列并⼿动更改变量值。
"Watches"(监视)窗⼝
设置监视会导致 XDebug 不稳定,因此不建议这样做。默认情况下,将禁⽤监视。不过,如果要设置监视,请参见。
"Call Stack"(调⽤堆栈)窗⼝
"Call Stack"(调⽤堆栈)窗⼝列出了在执⾏期间进⾏的调⽤序列。在挂起调试器时,"Call Stack"(调⽤堆栈)窗⼝将显⽰函数调⽤序列(即调⽤堆栈)。在初次暂停时,将会⾃动选择最顶部的堆栈框架。在该窗⼝中双击函数调⽤,即可在编辑器中转⾄该⾏。如果对 PHP 类进⾏调⽤,则在双击该调⽤时,"Navigator"(导航器)窗⼝也将转⾄该⾏。
可以双击某个调⽤堆栈框架将其选中,然后在和窗⼝中查看该框架的任何变量或表达式值。
"Threads"(线程)窗⼝
"Threads"(线程)窗⼝中会指出哪个 PHP 脚本当前处于活动状态,以及是在断点处挂起还是处于运⾏状态。如果该脚本处于运⾏状态,则需要转⾄浏览器窗⼝,并与该脚本进⾏交互。
"Sources"(源)窗⼝
"Sources"(源)窗⼝显⽰为调试会话加载的所有⽂件和脚本。对于 PHP 项⽬,"Sources"(源)窗⼝当前不起作⽤。"Breakpoints"(断点)窗⼝
可以使⽤ "Breakpoints"(断点)窗⼝来查看在 IDE 中设置的所有断点。
通过 "Breakpoints"(断点)窗⼝,可以在 "Context"(上下⽂)窗⼝中启⽤或禁⽤断点。此外,还可以创建断点组。
调试会话
以下过程是典型调试会话的⼯作流。
运⾏调试会话:
1. 启动 IDE,然后打开包含要调试的源代码的⽂件。
2. 在要暂停调试器的每⾏设置断点。要设置断点,请将光标放在⾏⾸,然后按 Ctrl-F8/⌘-F8 组合键,
或者选择 "Debug"(调试)>
"Toggle Line Breakpoint"(开启/关闭⾏断点)。
3. 在 "Projects"(项⽬)窗⼝中,导航⾄当前项⽬节点,单击⿏标右键,然后从弹出式菜单中选择 "Debug"(调试)。IDE 将打开调试器
窗⼝并在调试器中运⾏该项⽬,直⾄到达断点为⽌。
注:如果当前项⽬设置为“主项⽬”,您可以选择“调试”>“调试主项⽬”,按 Ctrl-F5,或单击。
4. 切换⾄ "Local Variables"(局部变量)窗⼝。该窗⼝显⽰当前函数中已初始化的所有变量及其类型和值。
5. 要查看该函数外部的变量值,请将光标置于此变量出现的某个位置上。⼯具提⽰会显⽰变量值。
6. 要逐⾏(包括所有被调⽤函数中的⾏)执⾏程序,请按 F7 键或选择 "Debug"(调试)> "Step Into"(步⼊),然后在 "Local
Variables"(局部变量)窗⼝中监视这些变量值的更改。
7. 要通过监视表达式的更改来检查程序逻辑,请定义⼀个新监视:
a. 要打开 "Watches"(监视)窗⼝,请选择 "Window"(窗⼝)> "Debugging"(调试)> "Watches"(监视),或者按 Ctrl-Shift-2
组合键。"Watches"(监视)窗⼝打开。
b. 在 "Watches"(监视)窗⼝中的任意位置单击⿏标右键,然后从弹出式菜单中选择 "New Watch"(新建监视)。"New
Watch"(新建监视)窗⼝打开。
c. 输⼊监视表达式,然后单击 "OK"(确定)。
现在,您便可以在调试过程中进⾏其他检查。
重要提⽰:您必须在中启⽤监视才能设置监视。
8. 要取消对某个函数中代码的逐⾏执⾏操作并跳⾄该函数调⽤后的下⼀⾏,请按 Ctrl-F7/⌘-F7 组合键或选择 "Debug"(调试)> "Step
Out"(步出)。
9. 要跳过对某个函数中代码的逐⾏执⾏操作,获取该函数返回的值,并跳⾄该函数调⽤后的下⼀⾏,请按 F8 键或选择 "Debug"(调
试)> "Step Over"(步过)。
10. 要暂停调试会话,请选择 "Debug"(调试)> "Pause"(暂停)。
11. 要继续调试会话,请选择 "Debug"(调试)> "Continue"(继续)或按。
12. 要取消调试会话,请按。
13. 在程序结束时,调试器窗⼝会关闭。
样例调试会话
本部分中的样例说明了基本的调试器函数,包括步⼊和步过函数。此外,还显⽰了典型的调试器窗⼝输出。
1. 使⽤以下参数创建新的 PHP 项⽬:
项⽬类型 - PHP 应⽤程序
源位置 - htdocs⽂件夹的默认位置
运⾏配置 - "Local Web Site"(本地 Web 站点)
有关设置 PHP 项⽬的更多详细信息,请参见⽂档。
2. 要在会话过程中使⽤热键,请将光标置于项⽬节点上,然后从弹出式菜单中选择 "Set as Main Project"(设置为主项⽬)。
3. 在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 ()函数⼀次,然后返回计算的阶乘和。
4. 在 PHP 块的开头设置⼀个断点(Ctrl-F8/⌘-F8 组合键):
<?php
5. 要开始调试,请单击。调试器将在断点处停⽌。
6. 按 F7 键三次。调试器将在调⽤函数calculate_sum_of_factorials ()的⾏上停⽌。"Local Variables"(局部变量)窗⼝会显⽰变量$m和$n以
及它们的值:
7. 要步⼊函数calculate_sum_of_factorials (),请按 F7 键。调试器开始执⾏函数calculate_sum_of_factorials ()中的代码,然后在函数
calculate_factorial ()的调⽤处停⽌。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。