java调试总结(精品)_第1页
java调试总结(精品)_第2页
java调试总结(精品)_第3页
java调试总结(精品)_第4页
java调试总结(精品)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

如何调试JAVA程序?总结人:luoji在你觉得有错的地方设置断点点击甲壳虫一样的按钮下面的子按钮,也是甲壳虫一样的,叫Debug运行程序,当程序运行到刚才设置断点的位置就会停下来,并且那行代码底色会高亮显示接着你在如下界面你可以看到你想要的信息3ServersiLCfilfCl走II■"“口e■"«rhl小口f'3ServersiLCfilfCl走II■"“口e■"«rhl小口f'tjin•fhrr諒13sFwrqn>nR'rpr'kwTifc1Ear^nRneWtlr邸口kwTr*l±9F^UfU:t?r'I'tir,「已卜'ir"Tir霑」円4'rfforqnrnplftrur*T„1LiitibiTigh^n^r^Tliit•卄-if毕每十*#汀口十丄眾術叶丄■feTBtl-[■积mi•:Ttr诵/[陀■口|”叮加啊d:[自fpe1! Af.DlTPEqpTR*hi-;[ilfFi'Ti•TEk材dTherald曲Thv^i^lI#Thr^irlThr^-iriz曲ThTMdMbVuidMesS3fcfcJgoints7410bDadrxMnhLi.xh^EtL-M*.•::■鼻曲TA=*Ligl平7亍科 l,ie^B)Dac-x-^BntFEETIL5)w工tGpl'L-t-lL&.I^irrlstlAipini-klBrl(3sPlPJDac-x-hiri'.'-liiri(i&MW:JlCXThintFEET■-?riq-Miii5.在Variables里面可以查看所有变量的值,比如刚才设置的断点里面的strClassName的值就可以看到。6.下面按钮第一个是进入方法执行,比如你调用了其他方法,可以进入方法一步一步执行,如果点击第二个按钮,只会在本方法内一步一步执行,第三个按钮时你跳出此方法,继续执行调用这个方法的原方法。7下面这个按钮时直接执行完程序。调试类型这儿有很多调试方法,无论是在客户端还是服务器端。我们在这个材料里面包含下面的方法:基本的Java字节码(也就是使用System.out.println())使用注释附加在一个正在运行的程序上远程调试需求调试(Debuggingondemand)优化代码的调试Servlet,JSP文件以及EJB组件的调试在后面会详细说明每一种类型的调试。共同的错误类型为了给你一个你将遇到什么的提示,我们在下面列出了开发者一次又一次遇到的普遍错误:编辑或句法错误是你最先和最容易遇到的错误。它们通常是键入错误引起的。逻辑错误不同于运行时错误,因为没有任何异常被抛出,但是输出不是期望的东西。这些错误的范围从缓冲区溢出到内存泄漏。运行时错误在程序执行时发生并且通常产生一个Java异常。线程错误是最难重复和跟踪的。JavadebuggingAPIsSun已经定义了调试的结构,它们称之为JBUG。这是为了回应对真正的Java调试器的需要做出的。这些APIs帮助程序员建立符合自己需要的调试器:•接口应该和语言的风格一样是面向对象的。例如线程和监视器这样的Java运行时特性应该被前面的支持。可以进行远程调试。在通常操作下的安全性不能被损害。修正的JavaDebugger(JDB)既是体现JavaDebuggingAPI的概念,同时又是一个有用的调试工具。它用JavaDebugInterface(JDI)重写并且是JDK的一部分。JDB将在后面详细讨论。准备一个调试用的程序Java平台为调试过程提供语言支持。你在用编译器编译你的程序时可以用编译选项指示编译器在目标文件中产生符号信息。如果你使用其它的编译器而不是javac,参考你的编译器的文档获得如何生成带有调试信息的目标文件。如果你使用javac编译器创建调试代码,使用-g编译选项。这个选项让你在调试的时候可以检查本机类实例和静态变量。如果你没有使用该选项生成你的类文件你也可以设置断点和追踪代码,但是你将不能检查变量。(断点是手工指定的程序运行停止的点。)即使你使用-g选项编译你的程序也不能调试JAVA平台的核心系统类的局部变量。如果你需要列出某些系统类的局部变量的列表,你需要使用-g选项编译这些类,也就是使用-g选项重新编译rt・jar的类或者是src.zip里面的文件。然后指定你的classpath为正确的类文件使你用新编译的类运行你的程序。在Java2下,使用bootclasspath选项使得新类被首先加载。记住如果你使用-0选项优化你的代码,你就不能调试你的类。优化会将所有的调试信息从类中去掉。注意:检查你的CLASSPATH环境变量是正确的才能让调试器和Java程序知道在哪儿寻找你的类库。你也应该检查你的调试工具看是否需要其它的什么或者是环境变量。设置断点调试的第一步就是找到代码出错的位置。断点设置能帮你完成这个。断点是你你放置在程序里面的临时标记,它使得调试器知道在哪儿停止程序的执行。例如,如果程序里面的某个申明引发问题,你可以将断点设置在包含那个申明的行上,然后运行程序。在那个申明被执行前程序停止执行。然后你可以检查变量、寄存器,存储器以及堆栈的内容,然后跨过(或执行)那个申明查看问题是怎么引起的。不同的调试器支持不同的断点。一些通用的类型是:行断点在程序特定行的代码被执行前被引发。方法断点在到达被设置成断点的方法时被引发。计数断点在某个计数器达到或超过某个特定值时被引发异常断点在代码抛出一个特定异常时被引发储存变化断点在存储在特定地址范围的内容被修改时引发地址断点在被设置成断点的地址达到时被引发注意:一些调试器只在编译版本的Java代码(使用just-in-time编译器生成的代码)上支持某些断点类型而不支持解释代码(使用javac工具生成的代码)。一个例子就是地址断点。每个工具在你能设置断点的方式上可能有些不同。检查你的工具的文档。你可能会问,我如何知道在哪儿放置断点?如果你对这个问题完全没有感觉,你可以在main()方法的开始设置断点如果你的代码产生堆栈复写(stacktrace),在程序产生它的地方设置断点。你将在堆栈复写里面看到源代码中出问题的行号。如果你的输出或者图形显示的特定部分没有正确的显示预定信息(例如文本域显示错误的文本),你可以在该组件被创建的地方设置断点。然后你可以单步执行你的程序显示和GUI对象相关的值。经验将在最合适的地方设置断点。你在一个类或者程序里面可以设置多个断点。通常,你在调试代码的时候会禁止、激活、添加、删除断点。工具会允许你查看你所设置的所有断点的位置同时给你一次删除所有断点的选项。单步执行程序单步执行程序是最终解决那些棘手的调试问题的方法。它允许你追踪类里面的方法体的整个执行过程。注意,你不需要设置断点就可以停止一个GUI程序的执行。设置断点后在调试器里面开始执行程序,当遇到第一个断点后,你可以越过申明,进入方法体或类体,也可以继续运行直到下一个断点或程序结束。在调试程序的时候经常遇到的术语有:进入执行当前行。如果当前行包含一个方法调用,执行被调用方法的第一行。如果类中的方法是用不带调试信息的选项编译的(也就是没有使用-g选项),你将看到NoSourceAvailable消息。•越过执行当前行而不会因为该行调用了一个方法或例程而停止。•返回从当前执行点执行并立即返回到调用当前方法的行。检查变量通常,程序会因为一个变量的值没有正确设置而进行核心转储(coredump)。最常见的是试图进行一个值为null的计算或比较以及除零。找出这种问题的最简单的办法是在错误发生的地方检查变量的值。最通常的情况是变量在那点没有得到预期分配的值。可视化调试器通常有一个监视窗口显示你当前正在执行的类的所有局部变量的值。某些调试器甚至显示变量的地址或更进一步的允许你动态的改变变量的值以查看如果值是你原来预想的情况时程序是否能继续执行。命令行调试器通常提供命令提供相应的特性。使用命令行特性,你甚至可以通过显示数组的每一行和每一列的内容来查看整个数组。虽然大多调试器只在监视窗口显示类里面的局部变量,还是有一些调试器允许你在变量超出范围后继续监视它。一些调试器支持查看寄存器。注意这只能是查看编译的Java程序而不能是解释的程序(字节码程序)。堆栈复写(Stacktraces)当Java程序进行内核转储(coredumps)时它在控制台产生我们称之为堆栈复写(stacktrace)的东西。堆栈复写告诉开发者程序发生问题的精确路径。它将说明类和方法名以及源代码中的行数(如果你使用调试选项编译)。如果你在发生堆栈复写的开始处开始调试并停下,你可以向后查看你的代码看看实际上是什么申明被执行了。这是一个快速发现程序问题的办法。你也可以使用下面的一个方法手动强制产生堆栈复写。Throwable().printStackTrace()在调用该方法的那个点产生堆栈复与。复与将显示方法调用所涉及到的线程。Thread.currentThread.dumpStack()只产生当前线程的一个快照。当你需要理解在什么条件下你的程序会产生堆栈复写时使用强制复写。下面的程序是一个强制堆栈复写的例子。这个程序片断进行文件拷贝。我们通过比较两个文件的长度是否相等来判断拷贝是否成功。如果不相等,我们向文件写入复写然后强制打印堆栈复写(参看黑体的申明)。Throwable()是java.lang中的一个类,printStackTrace()是Throwable()的一个方法,它打印程序执行路径的复写。publicstaticbooleancopyFile(StringsourceFile,StringtargetFile){//seeifthecopysucceeded.if(success){//seeifthecorrectnumberofbyteswerecopiedlongnewFileLength=newFile(targetFile).length();if(oldFileLength!=newFileLength){Debug.trace(1,sourceFile+Constants.BLANK_STRING+Long.toString(oldFileLength));Debug.trace(1,targetFile+Constants.BLANK_STRING+Long.toString(newFileLength));Throwable().printStackTrace();returnfalse;}}elseDebug.trace(1,sourceFile);Debug.trace(1,targetFile);returnfalse;}returntrue;}你可能会发现堆栈复写中没有行号。这可以简单的称为“编译代码”,要产生行号,使用nojit选项或者Djava

温馨提示

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

评论

0/150

提交评论