php程序员的优化调试技术和技巧_第1页
php程序员的优化调试技术和技巧_第2页
php程序员的优化调试技术和技巧_第3页
php程序员的优化调试技术和技巧_第4页
php程序员的优化调试技术和技巧_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、程序员的优化调试技术和技巧本文介绍调试告,以及通过在一个简单的应用程序的各种方法,包括在中放置策略性的 pr中打开错误报的 bug 的Apache and语句,找到更。还会介绍用于 Eclipse的Eclipse 插件,这是一个灵活的开发环境,具有实时语的 DBG 调试器扩展。法能力,还会介绍简介Eclipse有许多就是打开错误调试技术可以在编码的时候节约大量时间。一个有效却很基本的调试技术。另一个略微高级一点的技术包括使用语句,通过显示在屏幕上实pr际出现的内容,有助于精确地找出更难发现的 bug。Eclipse 是一个 Eclipse 插件,能够强调常见的语法错误,可以与调试器结合起来用于

2、设置断点。设置要学习本文描述的概念,需要本是 V5.0.3。需要一个 Web 服务器来、Web 服务器和 Eclipse。调试器扩展支持的版用创建的页面并把它们显示到浏览器。本文中使用的是 Apache2。但是,任何 Web 服务器都可以满足要求。要利用本文中介绍的一些调试技术,需要安装 Eclipse V3.1.1 和插件Eclipse V1.1.8。由于 Eclipse 要求 Java技术,所以还要它。还需要的调试器扩展模块。安装它略有些麻烦。请仔细跟随安装调试器扩展的操作说明。现在,先在.ini 文件中注释掉那些要求装入和配置扩展的行。在需要使用调试器的时候,再取消注释。请参阅 参考资料

3、 获得信息。现在介绍出错消息。出错消息出错消息是作为开发的第一道防线。谁都不想在一台没有配置成显示出错消息的服务器上用闭了错误开发代码。但是,请记住,当代码调试完成,准备运行的时候,应当确保关,因为不希望站点的者看到出错消息,因为这会给他们提供足够的信息来利用站点的弱点并黑掉站点。也可以用出错消息为自己服务,因为它们会显示抛出或生成错误的正确代码行。这样,调试就变成在浏览器上查看生成的错误所显示的行号,并在代码中检查这一行。稍后,将会看到Eclipse 插件通过即时地给语法错误加下划线并在保存文件时用红色 “x” 标注语法错误,可在开发和调试过提供极大的帮助。先来看如何在.ini 文件中开启错

4、误并设置错误的级别。然后将学习如何在Apache 的配置文件中覆盖这些设置。的错误.ini 文件中有许多配置设置。您应当已经设置好自己的.ini 文件并把它放在合适的目录中,就像在考资料)。在调试值:Linux 上安装和 Apache 2 的文档说明中所示的那样(请参阅 参应用程序时,应当知道两个配置变量。下面是这两个变量及其默认display_errors = Offerror_reporting = E_ALL通过在.ini 文件中搜索它们,可以发现这两个变量当前的默认值。display_errors 变量的目的很明显 它告诉是否显示错误。默认值是 Off。但是,要让开发过程更加轻松,请把

5、这个值设为 On:display_errors = Onerror_reporting 变量的默认值是 E_ALL。这个设置会显示从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出。我只想看到错误和不良编码实践,但是不想看到无害的提示。所以,请用以下值代替 error_reporting 的默认值:error_reporting = E_ALL &; E_NOTICE重新启动 Apache,就全部设置好了。接下来,将学习如何在 Apache 上做同样的事。服务器上的错误依赖于 Apache

6、正在做的工作,在中打开错误可能没法工作,因为在计算机上可能有多个能查看一个问题。但是,有别。版本。有时很难区分Apache 正在使用哪个版本,因为 Apache 只.ini 文件。不知道Apache 正在使用哪个.ini 文件配置自己是一个安全法可以在 Apache 中配置变量,从而保证设置了正确的出错级而且,最好知道如何在服务器端设置这些配置变量,以否决或抢占提供更高级别的安全性。.ini 文件,从而在配置 Apache 时,应该已经接触过 /conf/httpd.conf 中 http.conf文件中的基本配置。要做在.ini 文件中已经做过的事,请把下列各行添加到 httpd.conf,

7、覆盖任何.ini 文件:_flagdisplay_errors_value error_reportingon2039这会覆盖在 值。值 2039 代表.ini 文件中为 display_errors 已经设置的标志,以及 error_reporting 的; E_NOTICE。如果愿意采用 E_ALL,请把值设为 2047。同E_ALL &样,还是要重启 Apache。接下来,要在服务器上测试错误测试错误。如果启动了错误,会节约许多时间。中的错误会指向代码中的错误。请创建一个简单的文件test.,并像1 所示一样定义它。1. 一个生成错误的简单(The next line generates

8、 an error.);aline(PLEASE );(This will not be displayed due to the above error.);第一个 pr() 语句会向 Web 浏览器显示它的内容。但是第二个语句会生成错误并在Web 页面上显示。这造成最后一个 pr图 1. 生成错误() 语句不起作用,如图 1 所示。现在开启了错误介绍 pr语句!接下来,用pr语句帮助调试应用程序。因为应用程序中的功能性 bug 不会产生错误,所以在所有调试策略中,关于如何正确地放置和使用 pr或 die 语句来调试应用程序的知识是一种很好的资产。可以用pr 语句在代码中缩小对问题语句的定位

9、,这些语句在语法上没有错误,也不是 bug,但是从代码的功能上看是 bug。这些是最难发现和调试的 bug,因为它们不会抛出错误。惟一知道的就是在浏览器上显示的内容不是想要的内容,或者想要保存在数据库中的内容根本没有保存。假设正在处理通过 GET 请求发送过来的表单数据,想向浏览器显示信息,但是出于某种原因,数据没有正确地提交,或者不能正确地从 GET 请求中读出。要调试这类问题,重要的是用 pr () 或 die() 语句知道变量的值是什么。die() 语句会中止程序执行,并在 Web 浏览器上显示文本。如果不想注释掉代码,而且只想显示到出错之前的信息和出错信息,不想显示后面的信息,那么 d

10、ie() 语句特别有用。让使用在中用 pr语句来测试这个概念pr语句进行调试在我作程序员的那些时候,当我在 Linux上开发应用程序时,没有方便的 GUI 可以告诉我 bug 在哪,我迅速地发现我在程序中放的的范围缩小到一行的机会越大。请创建另一个样定义它。2. 显示通过 GET 提交的所有变量pr语句越多,我在应用程序中把 bug文件 test2.,并像2 所示的那$j = ;pr(Lets retrieve all the variablepr(script via a GET request:); foreach($_GET as $key = $i)pr($key=$j);bmitte

11、d to this );if($_GETSubmit = Send GET Request)$j = done!;Name: : 您可能会非常容易地发现2 中的 bug!您很棒!但请注意这是一个非常简单的脚本,只是作为使用 pr语句进行调试而展示的一个例子而已。这个只是提取GET 请请求向求中的所有变量,如果有,就把它们显示在浏览器上。还提供了一个表单,用 GET服务器发送变量以进试。请看输出,如图 2 所示。图 2. test2.的输出现在单击 Send GET Request 按钮,请注意只有 $_GET 请求的键显示在浏览器上,而正确的值都没显示。可以在循环中放一个 pr语句,检验在 f

12、oreach 循环中每个元素中是否确实存在数据。请参阅3。3. 用 pr语句验证代码的功能.foreach($_GET as $key = $i)pr(Correct data . $_GET$key . ); pr($key=$j);.放进去的 pr 语句是粗体。注意,现在已经知道在 Web 浏览器上显示的 $key 值是正确的,但是由于某些原因,值没有正确地显示。请看新的输出,如图 3 所示。图 3. 修改后的 test2.的输出现在已经知道应用程序正确地从 GET 请求接收到了变量,那么肯定是在代码中有 bug。查看之后注意到,用来显示值的变量 $j 是错误的。在 foreach 语句中

13、指定的是 $i,所以它肯定会有正确的值,但是无意之中输入了 $j。所以通过把 $j 替换成 $i,迅速地修正了错误,重新载入页面之后,就看到了正确的输出,如图 4 所示。图 4. 修正后的 test2.的输出现在可以删除或注释掉刚才添加的 pr 语句了,因为已经发现了代码中的 bug。注意,这只是在调试应用程序时可能遇到的许多错误中的一个很小的子集。对于使用数据库时可能遇到,一个好的解决方案是输出SQL 语句,以确保执行的 SQL 就是想要执行的。现在要来看看如何使用 Eclipse IDE 和提供帮助。程序员的优化调试技术和技巧 2Eclipse 插件及调试器扩展进一步在调试历您可能用过 E

14、clipse,但是可能不熟悉它。请参阅 参考资料 获得 Eclipse的介绍。用于 Eclipse 的Eclipse 插件是用来开发应用程序的一个流行工具。请启动Eclipse 并把工作区目录指定为 Apache 的www 目录(在机器上是 c:www)。现在单击 File New Project。会弹出 New Project 向导。双击单击 Next,输入项目名称 debugArticle,并单击 Finish。文件夹并选择Project。如果把 Web 服务器设置为在端口80 上侦听,那么不需要做任何修改。否则,请转到Navigator 窗口,在项目debugArticle 上右击,选择

15、 Properties,然后单击ProjectWeb 服务Settings。单击 Configure Workspa器侦听的端口(例如ettings 然后修改合适的 localhost 或者添加)。单击 Apply 完成设置。Navigator 窗口应当显示项目和一个.project 文件。在项目上右击,就像前面做的那样,只是这次选择 New File。用想要创建的文件的名称 test3.替换 *.,然后浏览单击 Finish。在 Eclipse IDE 中应当出现一个新文件。可能需要导航到窗口底部的器来查看文件的当前输出(参见图 5)。图 5. Eclipse 的注意,只有Eclipse 插

16、件Windows的用户可以像5 所示的那样使用浏览器。通过打开独立浏览器窗口并把浏览器指向测试所在目录,也可以使用同样的功能。现在来演示这个应用程序,证明它的强大能力。在“使用调试器”一节中,将学习如何用 EclipseEclipse 和前面功能开始。的调试器扩展来调试语法应用程序。先从学习如何使用它的语法和加下划线先从查看Eclipse 如何提供帮助调试应用程序的实时语法功能开始。要看这个特性的实际应用,先从在 Eclipse 中定义test3.开始,如下所示。(,o World!);注意,在4 中加下划线的两个字符在 Eclipse 中加了下划线,提示语法不正确。按Ctrl+S 保存文件,

17、会在 Eclipse 中显示错误:在代码中与错误对应的行上会加上红 “x”,如图 6 所示。图 6. 语法错误强调现在演示从上面定义的浏览器。这个窗口提供了当前的预览,如图 6 所示。test3.中删除逗号(,)。按 Ctrl+S 保存文件,然后观察浏览器窗口的更新,显示了o World(参见图 7)。图 7. 在Eclipse 中预览下面是用调试器在使用调试器中设置断点。使用调试器,可以设置断点并查看代码到所设断点之前的浏览器输出。然后可以继续代码的执行并查看到下一断点之前的浏览器输出,然后再到下一个,直到成。完现在把 “设置” 一节中在.ini 中注释掉的行取消注释,并重新启动 Apach

18、e。现在装入了调试器,Eclipse 能够和它挂上了。现在在 Eclipse 中设计调试环境。请创建新的 test4.文件,先保持为空。现在单击Run Debug。在左侧面板中选择DBG Script,并单击 New。现在转到File 选项卡,输入当前项目然后再到debugArticle 以及想要调试的文件 test4.。现在转到Environment 选项卡,reter 子选项卡。在的安装目录中找到.exe 文件(是5.0.3.exe)。现在单击 Remote Debug 子选项卡,选择Remote Debug,如果c:apps没有使用Windows,请取消 “Open with DBGSe

19、sURL inernal browser box” 复选框。的绝对路径(不是 Web 路径)相同(我把 Remote Source 路径设置成与要测试的的设置是 c:wwwdebugArticletest4.)。现在单击 Debug。现在应当装入 Debug Other,并选择 Debug。图 8. Eclipse 中的 Debug现在可以设置断点了。,如图 8 所示。否则,请单击 Window Open对于本文中使用的插件和扩展的版本,断点功能是必需的,因为在把输出发送到浏览器之前会缓冲它。除此之外,需要做的不仅仅是设置一个断点把当前显示数据刷新到Web 浏览器,所以要像下面和图 8 所示那样定义 test4.。4. 设置和创建断点function break-po() ob_flush(); flush();sleep(.1); debugBreak();pr(This will get shown pr(as will this);, );breakpo();pr(This wont get shown until after ); pr(continuing the break-po); breakpo();pr(END!);breakpo() 函数会把缓冲的输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论