如何调试程序序

php断点调试的几种方法讨论
作者:admin&&&&时间: 21:40:16&&&&浏览:
断点调试是程序开发过程中的一个必不可少的步骤,一些程序的断点调试操作比较简单,只需在编辑器里标记哪行为断点,便可得知程序各个环节的输出结果,例如c#、VB、Delphi等语言。但是对于php程序的调试来说,就不是这么简单了。本文将谈谈php断点调试的几种方法,对于php新手来说,可能更有参考价值。首先需要说明的是,php程序调试需要手动编写部分代码,目的是断截程序线程的执行,输出指定环节的结果,就是所谓的断点调试。所以,实际上需要讨论的问题是采用什么断点代码更合适。die()和exit()die()和exit()函数都有终止线程的作用,是php断点调试需要使用的最主要的函数,它们也是php程序员使用非常频繁的函数。然而两者又有什么区别呢?在程序调试时需要注意什么问题呢?die()函数一般与&or&一并使用,写作&or die()&,经常看到这样的语句:$file = fopen($filename, 'r') or die(&抱歉,无法打开: $filename&)or在这里是这样理解的,因为在PHP中并不区分数据类型,所以$file既可以是int也可以bool,所以这样的语句不会报错。但其处理过程可能有些朋友不大明白。其实在大多数的语言中, bool or bool这样的语句中,如果前一个值为真后一个值就不会再判断了。这里也是的,所以如果fopen函数执行正确的话,会返回一个大于0的int值(这其实就是&真&),后面的语句就不会执行了。如果fopen函数执行失败,就会返回false,那么就会判断后面的表达式是否为真了。结果执行了die()之后,不管返回什么,程序都已经停止执行了,并且显示指定的出错信息,也就达到了调试的目的。就这样。实际上,die和exit是等价的,都是用来终止当前脚本。php手册对两者的解释如是说:exit() 函数输出一条消息,并退出当前脚本。该函数是 die() 函数的别名。die() 函数输出一条消息,并退出当前脚本。该函数是 exit() 函数的别名。实例:&&?php $site = &.cn/&; fopen($site,&r&) or exit(&Unable to connect to $site&); ?&&&?php $site = &.cn/&; fopen($site,&r&) or die(&Unable to connect to $site&); ?&var_dump()和print_r()var_dump -- 打印变量的相关信息void var_dump ( mixed expression [, mixed expression [, ...]] )此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
提示: 为了防止程序直接将结果输出到浏览器,可以使用输出控制函数(output-control functions)来捕获此函数的输出,并把它们保存到一个例如 string 类型的变量中。   &?php$a = array (1, 2, array (&a&, &b&, &c&));var_dump ($a);$b = 3.1;$c = TRUE;var_dump($b,$c);?&var_dump()可以输出多个变量,如:var_dump($b,$c)print_r --& 打印关于变量的易于理解的信息bool print_r ( mixed expression [, bool return] )注: 参数 return 是在 PHP 4.3.0 的时候加上的print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。记住,print_r() 将把数组的指针移到最后边。使用reset() 可让指针回到开始处。&pre&&?php$a = array ('a' =& 'apple','b' =& 'banana','c' =& array ('x','y','z'));print_r ($a);?&&/pre&上边的代码将输出:&pre& Array ( [a] =& apple [b] =& banana [c] =& Array ( [0] =& x [1] =& y [2] =& z ) ) &/pre&如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。例子:return 参数示例&?php$b = array ('m' =& 'monkey','foo' =& 'bar','x' =& array ('x', 'y', 'z'));$results = print_r ($b, true); //$results 包含了 print_r 的输出结果?&注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的输出,可使用输出控制函数。注: 在 PHP 4.0.4 之前的版本中,如果给出的 array 或 object 包含了直接或间接指向自身的引用,print_r() 将永远继续下去。print_r($GLOBALS) 就是一个例子,因为 $GLOBALS 自身即是全局变量,其包含了指向自身的引用。Zend Debuggerphp断点调试,有人提到用Zend Debugger,简单方便,适合菜鸟使用。不过本人因没有用过,在此不作讨论。有兴趣的朋友可以在百度查询下相关的文章。相关文章:
把文章分享到:
QQ交流群()如何在ADAMS中调试命令程序
当我们使用ADAMS/VIEW命令语言编制好了程序以后,该如何进行程序的调试呢?
凡是熟悉VISUAL C++的用户都知道,在VISUAL
C++中,系统提供了丰富多彩的调试功能,可以对程序逐句调试,也可以深入到函数内部,可以查看所有变量的值,甚至可以查看寄存器的值的变化。那么在ADAMS中,又提供了哪些手段进行程序的调试呢?
基于笔者多年的实践,总结它有如下几种调试方法。
(1)基于文件的调试。
(2)基于命令窗口的调试。
(3)基于宏命令窗口的调试。
(4)基于分析设置的调试。
下面用一个简单的例子来说明这四种调试方法。
首先打开ADAMS,创建一个曲柄摇杆机构如下。
然后把模型库的内容导出
这样得到一个该四杆机构的命令流文件。读者可以打开该文件瞧瞧其内容。
就本程序而言,因其十分简单,没有什么好调试的。但是我们仍然用它来做调试,目的只是说明调试的方法。
下面开始调试该程序。
(1)基于文件的调试。
要使用这种方法,很容易。只需要按下F2,即可打开下面的窗口
然后选择该程序打开,即可运行该程序。
当然,这样并没有达到逐段调试的目的。我们可以另外创建一个空的cmd文件,例如命名为test.cmd,然后把model_1.cmd中的程序片段逐段的拷贝到该空的cmd文件中,然后逐步的运行该test.cmd,就可以看到每个片段程序运行的结果下。
(2)基于命令窗口的调试。
按下F3打开命令窗口,
然后把MODEL_1.CMD中的程序片段逐段的拷贝到该命令窗口的命令输入区域,按下回车键运行,即可以在命令窗口的信息区域看到该命令运行的结果。
(3)基于宏命令窗口的调试。
从主菜单的TOOLS>MACRO>DEBUG进入,打开命令调试窗口
点击[FILE]按钮,导入前面的MODEL_1.CMD程序。
会看到程序充满在上面的编辑框内部。
要调试程序,一般需要设置断点。
拖动右边的滚动条到某一命令行,然后在该命令行的最前面单击左键,则该行前面出现一个X,即设置好该行是一个断点。所谓断点,就是说,当程序运行到这一行时,必须停止下来,等候用户的下一步指示。
当设置好所需要的所有断点以后,点击【RUN】,则程序开始运行。程序运行的信息会在下面的信息窗口输出如下。
基于该窗口中的信息,我们就可以查看出错的片段。
该窗口中还有诸如STEP这种单步调试命令,以及某个变量的显示等,用户可以按下这些按钮,查看界面的变化,从而了解其功能。
该窗口很类似于VISUAL
C++的调试功能。虽然相比VC而言,功能相对简单,但是也算够用。
(4)基于分析设置的调试。
在我们进行仿真时,我们会打开仿真控制面板
在该面板最下面有【simulation
settings】这个按钮,点击它,出现下面的对话框
在该对话框的最上面一个目录中,选择DEBUGGING,则下面的面板会切换成调试的相关功能,它会让我们对积分过程进行逐步调试,从而深入考察ADAMS的积分细节。
上述四种调试方法,第四种主要针对动力学问题的积分过程进行调试,便于精确的选择积分算法,积分时间步长等。而其余的三种方法,主要是针对命令行的调试。笔者力推的当属第三种方法,这种方法功能相对齐全,它仿效了专业编程软件如VC,BC等的调试器,用起来相对方便。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。精品:舵机调试 舵机控制程序 单片机控制舵机程序 舵机原理 舵机控制 舵机程序 ar..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
舵机调试程序
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口IBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
在本地计算机上调试 Java™ 应用程序并不是惟一的选择。学习如何使用构成远程调试的不同连接类型进行远程调试。本文概述了设置远程应用程序调试的特性和示例。
, 软件工程师, IBM
Charles Lu 是 IBM China Software Development Lab 的软件开发人员,目前从事 IBM Lotus Expeditor 的开发。他感兴趣的领域包括设备编程、即时消息和语音技术。
远程调试对应用程序开发十分有用。例如,为不能托管开发平台的低端机器开发程序,或在专用的机器上(比如服务不能中断的 Web 服务器)调试程序。其他情况包括:运行在内存小或 CUP 性能低的设备上的 Java 应用程序(比如移动设备),或者开发人员想要将应用程序和开发环境分开,等等。先决条件如果您还没安装该程序,请下载 Eclipse V3.4(Ganymede)。在 Ganymede 中,套接字(socket)监听连接器被添加到 Remote Java Application 启动配置类型。Eclipse 最新的套接字监听连接器允许您打开 Java 调试器,它能够监听特定套接字上的连接。可以从命令行选项打开被调试的程序,并将其连接到调试器。在 Ganymede 发布之前,仅有一个连接套接字的连接器,被调试的程序所在的机器必须是一个与调试器相连的调试主机。由于受到内存和 CPU 不足的限制,要想让移动设备充当主机是不现实的。为了进行远程调试,必须使用 Java Virtual Machine (JVM) V5.0 或更新版本,比如 IBM® J9 或 Sun Microsystem 的 Java SE Development Kit(JDK)。本文主要讨论远程调试,而不是每个 Eclipse 调试特性的细节。查看
获得更多关于使用 Eclipse 进行调试的信息,并且可以找到上面提到的软件。JPDA 简介Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用程序。JPDA 由两个接口(分别是 JVM Tool Interface 和 JDI)、一个协议(Java Debug Wire Protocol)和两个用于合并它们的软件组件(后端和前端)组成。它的设计目的是让调试人员在任何环境中都可以进行调试。JPDA 不仅能够用于桌面系统,而且能够在嵌入式系统上很好地工作。JVM Tool Interface (JVMTI) 规定必须为调试提供 VM(编辑注:从 Java V5 开始,将用 JVMTI 代替 Java V1.4 中的 JVMDI)。Java Debug Wire Protocol (JDWP) 描述调试信息的格式,以及在被调试的进程和调试器前端之间传输的请求,调试器前端实现 JDI,比如 Eclipse、Borland JBuilder 等。根据 Sun 的 JPDA 规范,被调试的程序常常称为 debuggee。JDI 是一个高级的接口,它定义用于远程调试的信息和请求。下面给出了调试器的架构。清单 1. Java 平台调试器架构
Components
Debugger Interfaces
|--------------|
debuggee -----(
|--------------|
&---- JVMTI - Java VM Tool Interface
|--------------|
comm channel --(
&------------ JDWP - Java Debug Wire Protocol
|--------------|
debugger -----(
|--------------|
&---- JDI - Java Debug Interface
|--------------|因此,任何第三方工具和基于 JPDA 的 VM 应该都能协调工作。通过这个客户机-服务器架构,您可以从运行该平台的本地工作站调试 Java 程序,甚至还可以通过网络进行远程调试。在讨论调试场景之前,我们先了解 JPDA 规范中的两个术语:连接器和传输。连接器是一个 JDI 抽象,用来在调试器应用程序和目标 VM 之间建立连接。传输定义应用程序如何进行访问,以及数据如何在前端和后端之间传输。连接器 “映射” 到可用的传输类型和连接模式。在 Sun 的 JPDA 参考实现中,为 Microsoft® Windows® 提供了两个传输机制:套接字传输和共享内存传输。可用的连接器:连接套接字连接器连接共享内存连接器监听套接字连接器监听共享内存连接器启动命令行连接器在调试器应用程序和目标 VM 之间建立连接时,有一端将用作服务器并监听连接。随后,另一端将连接到监听器并建立一个连接。通过连接,调试器应用程序或目标 VM 都可以充当服务器。进程之间的通信可以在同一个机器或不同的机器上运行。要远程调试 Java 程序,难点不是在调试器的前端,而是远程 Java 后端。不幸的是,Eclipse 帮助系统中为这方面提供的信息并不多。事实上,JDI 和 JVMTI 是分别由 Eclipse 和 Java 运行时环境实现的。我们仅需要考虑 JDMP,因为它包含与 JVMTI 和 JDI 进行通信所需的信息。JDWP 包含许多参数,用于为远程 Java 应用程序调用所需的程序。以下是本文用到的一些参数。-Xdebug启用调试特性。-Xrunjdwp:&sub-options&在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。下面介绍一些特定的子选项。从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。但如果连接到 V5 以前的 VM,只能选择 -Xdebug 和 -Xrunjdwp。下面简单描述 -Xrunjdwp 子选项。transport这里通常使用套接字传输。但是在 Windows 平台上也可以使用共享内存传输。server如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。address这是连接的传输地址。如果服务器为 n,将尝试连接到该地址上的调试器应用程序。否则,将在这个端口监听连接。suspend如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。要获得每个调试设置的详细解释,请参考 JPDA 文档(参见 )。清单 2 是一个示例,显示如何在调试模式下启动 VM 并监听端口 8765 的套接字连接。清单 2. 作为调试服务器的目标 VM-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765清单 3 显示如何使用位于 8000 端口的主机 127.0.0.1 上的套接字连接运行中的调试器应用程序。清单 3. 作为调试客户机的目标 VM-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000Eclipse 中的远程调试特性Eclipse 是一个图形化 Java 调试器前端。JDI 在 org.eclipse.jdt.debug 包中实现。本文不详细讨论 JDI 实现。参见
获得关于 Eclipse JDT 和 Java JDI 技术的信息。我们首先应该知道要使用哪个 Eclipse 连接器。要了解 Eclipse 提供的远程连接类型,您可以转到 Eclipse 菜单并选择 Run & Debug Configurations...,在 Remote Java Application 中添加一个启动配置,然后从下拉列表中选择连接器。在 Ganymede 中共有两个连接器:Socket AttachSocket Listen对于监听套接字的连接器,Eclipse VM 将是与远程 Java 应用程序连接的主机。对于连接套接字的连接器,目标 VM 将作为主机。这两种连接器对应用程序调试没有影响,用户可以任意选择。但根据经验,需要使用速度更快、更强大的计算机作为 VM 调试主机,因为需要计算的资源很多。在调试 Java 应用程序之前,需要确保已经为远程应用程序启用所有调试选项。如果选项信息不可用,您将收到一个错误信息,比如 “Debug information is not available” 或 “Unable to install breakpoint due to missing line number”。您可以通过更改 Eclipse 菜单上的 Window & Preferences & Java & Compiler 来修改设置。图 1. Eclipse 中的调试选项 现在,我们已经准备好远程调试应用程序。我们分步执行:1. 使用简单类创建一个 Java 项目我们为调试创建一个简单类。清单 4 给出了示例代码。清单 4. 调试示例代码package com.ibm.developerWorks.
public class test {
public static void main(String[] args) {
System.out.println("This is a test.");
}2. 设置一个断点在代码中设置一个断点。在这个例子中,我们在 System.out.println("This is a test."); 这行中设置断点。图 2. 在 Eclipse 中设置断点3. 从本地调试应用程序在调试应用程序之前,确保已经为项目启用图 1 中描述的调试选项。从本地调试应用程序是没有必要的,但是这可以确保是否所有调试信息都可用。右键单击 Java 项目,并选择 Debug As,然后选择 Java Application(参见图 3)。如果应用程序在断点处停止执行,则表明调试信息正确显示。这时,可以继续使用这些调试特性,比如显示调试堆栈、变量或断点管理等等。图 3. 从本地调试应用程序4. 导出 Java 项目我们将使用这个应用程序作为调试目标。右键单击 Java 项目,选择 Export,然后选择 Java,最后选择 JAR file 或 Runnable JAR file 导出项目。将在指定的位置生成 JAR 文件。注意,如果 Java 源代码与目标应用程序不匹配,调试特性将不能正常工作。5. 手动运行 Java 应用程序打开控制台手动启动应用程序,确保正确配置了 Java 运行时环境。清单 5. 调用 Java 应用程序的示例java -jar test.jar6. 远程调试应用程序将 JAR 文件复制到远程计算机或同一台计算机上的适当位置,调用调试服务器,然后为它添加一个客户机。简单的 Java 应用程序就可以充当调试服务器或客户机。您可以在 Eclipse 中选择 Socket Attach 或 Socket Listen 连接类型,这取决于特定的配置。接下来的两个小节将学习如何将应用程序作为服务器或客户机运行。作为调试服务器的目标 VM下面这个示例远程调用 Java 应用程序作为调试服务器,并在端口 8000 监听套接字连接。目标 VM 将暂停,直到调试器连接。清单 6. Eclipse 连接套接字模式下的 VM 调用示例java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar
test.jar使用远程启动配置启动 Eclipse,并指定远程应用程序的目标 VM 地址。为此,单击 Run & Debug Configurations,然后在 Eclipse 菜单中双击 Remote Java Application。从最新创建的启动配置中为目标应用程序指定 IP 和端口。为了在同一台机器上运行远程应用程序,仅需将主机 IP 指定为 localhost 或 127.0.0.1。图 4. 连接套接字连接的配置选择 Allow termination of remote VM 选项终止在应用程序调试期间连接的 VM。图 5. Eclipse 中的 Terminate 按钮作为调试客户机的目标 VM第二个示例使用一个简单的 Java 应用程序作为调试客户机,并且调试器前端作为调试服务器。Eclipse 使用套接字监听模式连接类型进行监听。必须先启动调试前端来监听特定的端口。图 6 给出一个用于设置监听的示例配置。图 6. 监听套接字连接的配置单击 Eclipse Debug 按钮,状态栏将显示消息 “waiting for vm to connect at port 8000...”。看到这个消息后,启动远程应用程序。清单 7 显示了如何将 Java 应用程序作为调试客户机并调用它,然后使用端口 8000 上的主机 127.0.0.1 的套接字将其连接到一个正在运行的调试器应用程序。清单 7. Eclipse 监听套接字连接模式中的 VM 调用示例
java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y
-jar test.jar如果一切进行顺利,将会显示一个调试透视图帮助调试应用程序,并且远程 Java 应用程序将正常停止。这类似于步骤 3 中的本地调试(参见图 3)。在这里,您可以使用标准的调试特性,比如设置断点和值、单步执行等。结束语本文演示如何使用 Eclipse 内置的远程 Java 应用程序配置类型对应用程序执行远程调试。介绍了如何设置 Java 应用程序以调用远程调试,并帮助您理解 Eclipse 提供的连接器。最后,您还学习了如何将这些技术应用到项目中。
参考资料 您可以参阅本文在 developerWorks 全球网站上的 。
“” 概述了几个 Ganymede 项目,并提供相关的资源。
要初步了解如何在 Eclipse 平台上进行调试,请参阅 “”。
丰富您的 Eclipse 调试知识。
更多地了解 Sun Microsystems 提供的 。
更多地了解 JPDA。
更多地了解 JDI。 提供的工具插件可以实现 支持任何 Java 应用程序开发的 Java IDE,包括 Eclipse 插件。
查看 “”。
在 developerWorks 上浏览所有的 。
您是 Eclipse 新手吗?阅读 developerWorks 文章 “” 以了解它的起源和架构,以及如何用插件扩展 Eclipse。
查看 IBM developerWorks 的
提高您的 Eclipse 技巧。
要收听针对软件开发人员的有趣访谈和讨论,请访问 。
随时关注 developerWorks 的 。
查看免费的
体验并了解 IBM 和开放源码技术及产品功能。
查阅最近将在全球举办的面向 IBM 开放源码开发人员的研讨会、交易展览、网络广播和其他 。
访问 developerWorks ,获得丰富的 how-to 信息、工具和项目更新,帮助您用开放源码技术进行开发,并与 IBM 产品结合使用。从
V5 或更新版本。
上查看最新的 。
从 Eclipse Foundation 下载 。
下载 ,使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
改进您的下一个开源开发项目,可以下载或从 DVD 获得。 应当是讨论关于 Eclipse 的问题的第一站(选择此链接将启动默认的 Usenet 新闻阅读器应用程序并打开 eclipse.platform)。 为对使用和扩展 Eclipse 感兴趣的人员提供了许多参考资料。
并加入 developerWorks 社区。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
为灾难恢复构建应用,赢取现金大奖。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Open source, Java technologyArticleID=363049ArticleTitle=使用 Eclipse 远程调试 Java 应用程序publish-date=}

我要回帖

更多关于 vc++6.0 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信