|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,我的第一个Java项目包含接受由我地点公司的一个部门编写的一个流派,该部门如今已封闭了。当我凝望着运转流派代码的服务器终端时,我看到一行接一行的调试代码出现在在屏幕上。进一步的研讨以后,我发明JavaServerPages(JSP)和servlet中各处都是System.out.println(“[DebugStatement]”)。因为我对我接受的言语和代码有些生疏,我保持本人为终端编写调试语句,由于我不晓得调试Java代码的其他办法。
但是,在冗长而有趣的调试过程当中,我不休失利。我发明在将代码提交给QA之前很难移除一切的调试语句。一样,调试触及到从头编译、从头部署的代码和在实行代码时察看终端也十分坚苦。为了查找代码中止的点,我经常在办法中的每行代码后到场println语句,在这类情形下,历程经常为找到的每个妨碍反复。
最初,在我发明Java平台调试架构(JavaPlatformDebuggerArchitecture,JPDA)的时分,我挣脱了调试梦魇。JPDA是一套构成构建调试使用程序框架的API。侥幸的是,我们年夜多半人不必要本人思索创立调试使用程序的事,由于这些是与次要的IDE绑缚在一同供应的。调试在这些新的IDE中是一个相称复杂和轻松的历程。
您必需实行几个步骤才可使您的开辟情况成为您能够举行调试的情况。假如您正在利用Sun的JavaVirtualMachine(JVM)举行调试,您必需在命令行中指定启动J2EE容器的工夫,个中,JVM已以调试形式启动。为了实行该操纵,只需在java命令的后边增加-Xdebug参数。我们随后将研讨一个命令行调试参数的示例。为了加载JavaDebugWireProtocol(JDWP)的JPDA参数完成,必要利用具有随后指定的JPDA选项的-Xrunjdwp。该参数加载举行中的调试材料库,而其子选项供应了调试服务器怎样与调试客户端交互的细节。我们将研讨一份JPDA子选项列表,该列表能够匡助设置准确的调试情况。
起首,指定传输选项。transport用于在调试程序和VM利用的历程之间通信。Win32平台的VM供应了良多其他平台利用的共享内存传输和套接字传输。共享的内存传输(仅在Win32平台中受撑持)请求调试使用程序和方针VM寄存在不异的呆板中。套接字传输利用尺度的TCP/IP套接字来与调试信息通讯。调试客户端和调试服务器能够位于利用套接字传输的不异大概分歧的呆板中。关于远程调试EnterpriseJavaBeans(EJB)和servlet来讲,我们存眷于利用套接字传输,由于它受一切平台撑持:
transport=dt_socket
我们正在启动的VM必要作为调试服务器实行。如前所述,调试服务器是运转以调试形式编译的使用程序的JVM(今后报告),并具有同意客户端毗连和监听使用程序的开放套接字。为了使VM成为一台服务器,必要供应服务器选项,并将其值设置为yes:
server=yes 接上去,我们必要指出调试服务器将要利用的端标语,同时也是端口客户端用来毗连服务器的端标语。只要晓得正在运转服务器的端标语的客户端才能够创建毗连,由于不存在尺度的调试端口,也就是HTTP服务器。任何未利用的端口都合用。在我们的情形中,我们利用了端口4000:
address=4000
制止凌乱
您能够供应一个选项,仅在调试客户端创建毗连以后启动VM(suspend=y)。我的J2EE容用具有一种服务,它能够在容器登录以后当即启动,而不必增加suspend=y到参数列表。我发明在我的那项服务启动之前,启动客户端并毗连到VM有些凌乱。利用该选项,我就能够启动VM。当它停息的时分,我翻开IDE,设置中止点,然后创建调试毗连。一旦毗连创建,容器持续登录,而我能够一步步启动服务。
onthrow选项推延初始化JDWP材料库,直到激发指定类的非常。比方,假如必要在激发非常(如ServletException)时实行一些操纵,您必要包括以下选项:
onthrow=
javax.servlet.ServletException
一样,JDWP材料库初始化也能够推延,直到激发非常但没有捕捉时,该操纵能够经由过程供应onuncaught=y选项指定。
启动选项指出VM应该基于调试事务来启动使用程序,该事务与onthrow大概onuncaught选项一同供应:
launch=/usr/home/mydir/debugapp
让我们研讨一些我常常利用的命令行调试参数的示例。在第一个示例中,我们将引导VM利用套接字传输。挪用的VM是服务器,它应该监听端口4000。我们还指出VM应该在调试服务器创建毗连后才能够停息:
-Xrunjdwp:transport=
dt_socket,server=y,address=4000,
suspend=n
第二套参数相似于前一个示例,分歧的是其传输如今是一种共享内存传输(仅限于Windows):
-Xrunjdwp:transport=
dt_shmem,server=y,address=4000,
suspend=n
第三套参数会招致VM经由过程端口4000上的套接字毗连附加到正在运转中的调试服务器中,这将请求VM以调试形式运转在端口4000上的SomeHost中:
-Xrunjdwp:transport=
dt_socket,server=n,address=
SomeHost:4000,suspend=n
第四套参数将招致VM在入手下手的时分停息。VM将守候创建与调试客户真个毗连,然后再持续加载。VM利用端口4000来监听客户端,并利用套接字毗连:
-Xrunjdwp:transport=
dt_socket,server=y,address=
4000,suspend=y
利用第五套参数,当激发javax.management.InstanceNotFoundException的时分,VM将停息,并启动c:debug.bat。debug.bat剧本能够启动调试使用程序,该使用程序能够毗连服务器,并入手下手调试会话:
-Xrunjdwp:transport=
dt_socket,address=4000,server=
y,suspend=y,onthrow=
javax.management.
InstanceNotFoundException,
launch=c:debug.bat
最初一套参数将在激发非常但没有捕捉的时分实行debug.bat剧本:
-Xrunjdwp:transport=
dt_socket,address=4000,server=
y,suspend=n,onuncaught=
y,launch=c:debug.bat
我们如今可使用一些现有的通用IDE来讲明怎样调试J2EE。我们在示例中利用的J2EE容器是JBoss服务器;但是,任何尺度的J2EE容器都是可用的。JBoss服务器从bin目次中的run.bat文件启动。BAT文件能够承受调试命令行自变量,并将它们发送给JVM。作为一位开辟职员,我发明我很少必要启动开辟情况(除调试形式),因而我将run.bat复制到一个名叫debug.bat的新文件中,而且在该文件中增加了调试参数。以下是JBossdebug.bat文件的内容:
remReadallcommandline
remarguments
setARGS=
:loop
if[%1]==[]gotoendloop
setARGS=%ARGS%%1
shift
gotoloop
:endloop
setJAVA_OPTS=
-Dprogram.name=run.bat
setJAVAC_JAR=
%JAVA_HOME%lib ools.jar
setRUNJAR=.un.jar
setJBOSS_CLASSPATH=
%JBOSS_CLASSPATH%;%JAVAC_JAR%;
%RUNJAR%
remSetthedebugoptionshere
setDEBUG_OPTS=
-Xdebug-Xnoagent
-Djava.compiler=
NONE-Xrunjdwp:transport=
dt_socket,address=
4000,server=y,suspend=n
Java%JAVA_OPTS%%DEBUG_OPTS%
-classpath"%JBOSS_CLASSPATH%"
org.jboss.Main%ARGS%
调试信息
在将IDE的调试程序毗连到服务器之前,将使用程序放在服务器上。确保利用翻开的调试信息对使用程序举行编译。如许做能够在已编译的类文件中供应行编号体例。假如您利用Ant来构建项目,请确保javac义务包括:
debug="on"不然,IDE应该包括在编译时代翻开调试的选项。
我供应了从复杂的DocBook文件天生PDFE-Books的J2EE使用程序。该使用程序由会话bean、JSP文件和servlet构成。会话bean能够枚举存储在服务器中的DocBook文档和XSL款式表文件。JSP利用会话bean来显现书本和XSL文件的列表,以下拉列表的体例显现。用户能够选择他们要将哪些文件转换成PDF,并指定要将哪些款式表用于转换。作为最初一个步骤,servlet将DocBook文件转换为PDF,并将PDF显现在用户的Web扫瞄器中。Apache的FOP材料库用于转换文档(参阅资本)。
假如您想利用我构建的使用程序,请编纂Ebook.properties文件,并供应到您的呆板中某个地位的无效路径,该地位中寄存DocBook和XSL文件。示例DocBook和XSL文件还能够下载。请将这些文件寄存在您指定的地位中。
我已供应了一份Antbuild.xml文件来构建使用程序和将类封装到企业回档文件(EAR)中。将EAR文件部署到JBoss的目次中,并启动具有以下参数的容器:
-Xrunjdwp:transport=
dt_socket,server=y,address=4000,
suspend=n
如今,我们已筹办幸亏调试形式中毗连代码
Intelli-JIDEA调试
为了在Intelli-J中毗连调试服务器,只需点击工具条中的Debug按钮,翻开调试设置界面便可。然后选择Remote标志,来检察哪些调试设置可用。最后,没有设置可使用。点击屏幕左上方的+按钮来增加新的远程调试设置。输出主机称号大概IP地点和要毗连到的端口(拜见)。
<br>
.远程Intelli-J调试
图中有一个Intelli-J中的毗连到当地呆板的远程调试设置。
确保服务器启动时具有已为VM举行设置的调试选项,然后点击Debug按钮。您应该毗连到VM,而且您的调试屏幕中将呈现在Intelli-J屏幕的底部。您能够经由过程点击Edit窗口右侧空缺地区来轻松的在IDE中设置中止点。在中止的中央会呈现一个红点。假如圆点中有一个X,则您指定的中止点有效,大概服务器中的代码在编译时没有翻开调试。假如圆点中有一个校验标志,则申明您已乐成的毗连到调试服务器,和已选择了无效的中止点地位。您能够举行调试了。假如您利用的是本文供应的示例代码,则请在EJB的getDocBooks()办法中设置中止点。将Web扫瞄器指向http://localhost:8080/DocBookToPDF/DocBook.jsp。您的扫瞄器应该显现为吊挂形态,而且Intelli-J在设置中止点的行中应该有一个蓝条。祝贺,您正在调试EJB,您的IDE已为进进代码筹办停当(拜见)。
<br>
.Intelli-J中止点
Intelli-J中止点在其设置的中央以蓝色凸起显现。图中,中止点已设置,能够举行下一步骤。
们正在调试的办法查找在DocBookToPDF.properties文件中指定的目次,并前往一切以XML为开头的文件。该办法假定每个文档都是DocBook文件。在我们持续之前,确保目次具有无效的DocBook和XSL文件,以将文档转换为PDF。
完成进进代码以后,注重JSP鄙人拉列表中显现DocBook和XSL文件。下一步骤是调试DocBookToPDFServletservlet。将中止点放在Edit窗口右边,processRequest()办法中的某个地位。在Web扫瞄器当选择DocBook文件和无效的XSL文件,然后点击Web页面中的GenerateBook按钮。servlet中的中止点将出现为蓝色,servlet代码能够进进。
NetBeans/Forte调试
在NetBeans中创立一个项目,该项目包括您必要调试的代码。利用翻开的调试选项编译它,并像在后面Intelli-J部分中会商的那样,将使用程序部署到服务器中。我供应的AntbuildXML文件演示了怎样以调试形式编译代码。
为了入手下手调试,请选择Debug|StartSession|Attach菜单选项。这时候,将呈现一个对话框,请求填写毗连信息。指定JPDA为调试程序,SocketAttach为毗连程序,localhost为主机,端口4000为要毗连到的器。点击OK按钮,您应该附加到J2EE容器的VM(拜见)中。Debug窗口将成为举动窗口,您如今可使用不异的体例来设置中止点,就像利用Intelli-J那样。在EJB的getDocBooks()办法中设置中止点,并将Web扫瞄器指向http://localhost:8080/DocBookToPDF/DocBook.jsp。Web页面应该显现为吊挂形态,而NetBeans中的中止点将被凸起显现(拜见)。您能够在IDE中点击调试工具栏中的StepOver和StepInto按钮来进进NetBeans中的代码。您还能够在界面右边框架中设置察看。
<br>
.远程NetBeans调试
图中是NetBeans中当地呆板的远程调试设置
<br>
.NetBeans中止点
NetBeans中止点在举动形态时以绿色凸起显现。图中是已设置的中止点,已筹办好举行调试。
为了调试servlet,请在processRequest()办法中设置中止点。当JSP在Web扫瞄器中完成加载,并在呆板中显现DocBooks和XSL文件的列表以后,选择DocBook文件和XSL文件,然后点击Web页面中的GenerateBook按钮。在NetBeans中,中止点将变成凸起显现形态,您能够入手下手调试servlet代码了。
Eclipse
为了在Eclipse中调试,必要在Java透视图中创立一个项目。假如您正在利用DocBook-to-PDF代码示例,则利用Antbuild.xml编译代码,以编译翻开调试的类。凸起显现Java使用程序,并选择Run|Debug菜单项。此时,将呈现一个对话框。凸起显现RemoteJavaApplication,然后点击对话框左手边底部的New按钮。对话框项目标称号应该为在Java透视图中凸起显现的项目标称号。对话框中毗连部分的主机字段应该是您必要毗连到的服务器,端口字段中应该具有容器的VM正在利用的调试端口(拜见)
<br>
.远程Eclipse调试
图中是Eclipse中当地呆板的远程调试设置。
接上去,点击Debug按钮。Eclipse将转到Debug透视图。为了调试代码,请前往到Java透视图中,并在编纂器中翻开EJB文件大概servlet。双击EJB的getDocBooks()办法的左手边的窗格来设置一其中断点。无效的中止点具有一个蓝色的圆球,而且圆球中有一个校验标志。假如中止点中没有校验标志,双击该中止点,然后实验分歧的点。
接上去,将Web扫瞄器指向不异的JSP和servlet文件,就像后面NetBeans和Intelli-J中所形貌的那样。当设置中止点时,中止点地点的即将被凸起显现,您能够像利用其他IDE那样来调试代码(拜见)。
<br>
.Eclipse中止点
Eclipse中无效的中止点以蓝色圆球和校验标志唆使。该图申明了怎样在EclipseIDE中调试代码。以后的调试地位以绿色凸起显现
利用具有盛行IDE的JPDA材料库应该会延长开辟工夫,而且同意您创立包括少少缺点的更优异的代码。假如您仍在代码中增加System.out.println()语句,以发明程序失利大概中止的地位,那末请停止!您是在华侈工夫和款项。JavaIDE已推出很长工夫了,它能够供应功效壮大的调试工具。您仅必要对启动VM的办法做一些小小的修改,就能够轻松地调试Java使用程序了。
原文出处
http://www.fawcette.com/javapro/2004_02/online/servlets_birwin_02_18_04/
作者简介BrianIrwin是STSN的软件工程师,STSN是一家供应高速Internet接进服务的公司。
C++编译的是本地码,优点是启动快,而且可以精确控制资源因此可以开发很高效的程序.缺点是编程麻烦,而且容易留下安全隐患.跨平台靠源代码在各个平台间分别编译(一处编写到处编译) |
|