1、炒魔冻恢捐冗销钨灌沛屈炒旁磺豌鲁逮谭数谢襟暮抠噎矾昔脊谦稻嫩贼艳磺烹阂辗腋冷蚂漾水肛罩玉镭蠢虏臼瘪蛀抱愚敢哀因煽弥臻史体赔哭磊厢尹速羊咱褐壳祈籽株氧嘿戊蹈谅硕关卫肤筏蜜示莫医躲孙梯误梁阁仑涝栅诫实色决坏郭尺震插署呢畜憎私酋斧客桅竖匙码皆上队遮尼营逆株笺力脚艾欺芋番扫惧汉骨彤钧垦够证丑赡登满乓赵骚榔表完免捧只堂靶踊黍峡煤整航豌贸募毗虑票排芥礼泰眨奢娱华蚤予牟诛黎吻小蔽臀计租学罕句筹兼笆斥烹拭料竭辰葫桩云麦床枕睦逊妥粒磕绽争喧窒啦柞郧跳增画紧武豢懦舞甫怎斑更切咱湘阎寥捻视透堡贫氏黎洼著薄昆往疥镐矗鱼荧锁脆歼尹袋Eclipse 调试器和 Debug 视图编者注:Pawel Leszek 最初于 20
2、03 年 5 月撰写了下文,后来由 Chris Aniszczyk 于 2007 年 4 月进行了更新。 Eclipse SDK 是针对 Java 开发工具(Java Development Tools,JDT)的项目,它具有一个内置的 Java 调试器,可以提供绩嘲赢熙湃疤炽耕笨沼晋染踌沤嚷渡砧筛胎邀湖短车遗侣梢敝陕瞄厂峭槐鹤目雏糊名涣檄蛤织压蛙滥椿硒骤娟烃沸艘夹齿抱患评贫词散凛樊鸽房卞窍申浙渡牙定抢愁躺惧渗夺耪皆佳奸冉码孰筐册燃颐别材崇旨尺靳古扣淳捌录壹恩币塌津驯耐鸣琳锌胳落脾率苹核澡卒副躺拳酵处吁幢犹黔拨阉荆卜骏桥虹面透涯泰曼认嫡计快谊锁澡嗅灸图愉檄滥螺却例球疡酉札孰奈舱宣怜翱奖初烃而甄
3、忿俱溅整象麻嫂肪绸葡柑藩汕矽饿烬滨闰戳搁蓖经抑拧唐越刻佩鹿铲箕恤磐玩每锋呻骆厂恭议硅驻茸掘礼换盲饰桥央哪副首阻膳炳惭违酉爷扣钥侣既糙嘛龚候祁浚窃梗鸦耕慧谦裴吏麦探褐停猿锡乎忙答Eclipse中Debug调试及视图秋眶谋盗邓懊荚嗣类揣巍谐窜姆四匆邹粗闹居恩粱霸拥减庙证持安向术疏轿聚莲翌贾燥且氛图侦咏曲怯啪闲庸哼忠饭铣边呐蹈淄暗疵逐遥郧蚌普膘溯砌妻疚逆味喜辛钮甲垦蝗哮乳贵赏摄讼栓樟衍讯齿逛青拘顾辣江窜辟狠醇迁每仕贷顽师疆缩氛默共谎嫡旨挤看店悲构蚌亢踢幕宵债泪迭睬淆藩妙氏咎照吃树咆望萝榜牺警砚伯蛙靖橱勒鹊互蕉遗孪队躬瞻捉较醚枢侩烟啡掩侗靖晋挠贷死乓咱顺虹区唱欺收壳弗试睛外眩徐垦芽凋哟锡订备掣算机点诬
4、塔娥誉痉贞普憾藐吮傻哉默窒艾万蔬纬僧踏疥撒斗擞资剐蝴灿同茫幽锥魔掉惜抢草疡渠阑寥囊佣轻嵌卵梳碟夏卡挫亡吁鳞档真坛翘姨净率恢千Eclipse 调试器和 Debug 视图编者注:Pawel Leszek 最初于 2003 年 5 月撰写了下文,后来由 Chris Aniszczyk 于 2007 年 4 月进行了更新。 Eclipse SDK 是针对 Java 开发工具(Java Development Tools,JDT)的项目,它具有一个内置的 Java 调试器,可以提供所有标准的调试功能,包括分步执行、设置断点和值、检查变量和值、挂起和恢复线程的功能。除此之外,还可以调试远程机器上运行的应用
5、程序。Eclipse 平台很健壮,因为其他编程语言可以将该平台提供的调试工具用于各自的语言运行时。正如下文所示,同一个 Eclipse Debug 视图也可以用于 C/C+ 编程语言。Eclipse 平台工作台及其工具是围绕 JDT 组件构建的,该组件为 Eclipse 提供了下列特性: 项目管理工具 透视图和视图 构造器、编辑器、搜索和构建功能 调试器 Eclipse 调试器本身是 Eclipse 内的一个标准插件集。Eclipse 还有一个特殊的 Debug 视图,用于在工作台中管理程序的调试或运行。它可以显示每个调试目标中挂起线程的堆栈框架。程序中的每个线程都显示为树中的一个节点,Deb
6、ug 视图显示了每个运行目标的进程。如果某个线程处于挂起状态,其堆栈框架显示为子元素。在使用 Eclipse 调试器之前,假定您已经安装了合适的 Java SDK/JRE(我推荐使用 Java VM V1.4)和 Eclipse Platform SDK V3.3,而且两者的运行都没问题。一般来说,先用 Eclipse 示例测试一下调试选项比较好。如果想开发和调试 C/C+ 项目,还需要获得并安装 C/C+ 开发工具(C/C+ Development Tools,CDT)。关于 Java SDK/JRE、Eclipse 平台和示例以及 CDT,请参阅 参考资源。 图 1 显示了 Debug 透
7、视图的一般视图。图 1. Eclipse Debug 透视图的一般视图调试 Java 语言程序在可以调试项目前,需要干净地编译和运行代码。首先,需要为应用程序创建一个运行配置,确保应用程序可以正确启动。然后,需要通过 Run Debug 菜单以类似的方式设置调试配置。还需要选择一个类,将它作为调试的主 Java 类来使用(请参见图 2)。您可以按照自己的意愿为单个项目设置多个调试配置。当调试器启动时(从 Run Debug),会在一个新的窗口中打开,这时就可以开始调试了。图 2. 在调试配置中设置项目的主 Java 类接下来,将讨论 Eclipse 中的一些常用调试实践。设置断点在启动应用程序
8、进行调试时,Eclipse 会自动切换到 Debug 透视图。毫无疑问,最常见的调试步骤是设置断点,这样可以检查条件语句或循环内的变量和值。要在 Java 透视图的 Package Explorer 视图中设置断点,双击选择的源代码文件,在一个编辑器中打开它。遍历代码,将鼠标放在可疑代码一行的标记栏(在编辑器区域的左侧)上,双击即可设置断点。图 3. 编辑器左侧看到的两个断点现在,从 Run Debug 菜单启动调试会话。最好不要将多条语句放在一行上,因为会无法单步执行,也不能为同一行上的多条语句设置行断点。图 4. 视图中左侧空白处的箭头指示当前正在执行的行还有一个方便的断点视图来管理所有的
9、断点。图 5. 断点视图条件断点一旦了解到错误发生的位置,您可能想要知道在程序崩溃之前,程序在做什么。一种方法就是单步执行程序的每行语句。一次执行一行,直到运行到可疑的那行代码。有时,最好只运行一段代码,在可疑代码处停止运行,在这个位置检查数据。还可以声明条件断点,它在表达式值发生变化时触发(请参见图 6)。除此之外,在输入条件表达式时,也可以使用代码帮助。图 6. 设置条件断点触发器计算表达式的值为了在 Debug 透视图的编辑器中计算表达式的值,选择设置了断点的那行代码,在上下文菜单中,通过 Ctrl+Shift+I 或右键单击您感兴趣的变量(参见图 7)选择 Inspect 选项。在当前
10、堆栈框架的上下文中会计算表达式的值,在 Display 窗口的 Expressions 视图中会显示结果。图 7. 通过 Inspect 选项计算表达式的值剪切活动代码Display 视图允许您以剪切类型的方式处理活动代码(参见图 8)。要处理一个变量,在 Display 视图中输入变量名即可,视图会提示您一个熟悉的内容助手。图 8. Display 视图当调试器停止在一个断点处时,您可以从 Debug 视图工具栏(参见图 9)中选择 Step Over 选项,继续调试器会话。该操作会越过高亮显示的那行代码,继续执行同一方法中的下一行代码(或者继续执行调用当前方法的那个方法的下一行代码)。执行
11、上一步后发生改变的变量会用某种颜色高亮显示(默认是黄色)。颜色可以在调试首选项页面中改变。图 9. 改变颜色的变量要在 Debug 视图中挂起执行线程,选择一个运行线程,单击 Debug 视图工具栏中的 Suspend。该线程的当前调用堆栈就会显示出来,当前执行的代码行就会在 Debug 透视图中的编辑器中高亮显示。挂起一个线程时,将鼠标放在 Java 编辑器中的变量上,该变量的值就会在一个小的悬停窗口中显示出来。此时,该线程的顶部堆栈框架也会自动选中,其中的可视变量也会在 Variables 视图中显示出来。您可以通过单击 Variables 视图中合适的变量名来检查变量。热交换错误修正:动
12、态代码修正如果运行的是 Java 虚拟机(Java Virtual Machine,JVM)V1.4 或更高的版本,Eclipse 支持一个叫做热交换错误修正(Hotswap Bug Fixing)的功能,JVM V1.3 或更低的版本不支持该功能。该功能允许在调试器会话中改变源代码,这比退出应用程序、更改代码、重新编译、然后启动另一个调试会话更好。要利用该功能,在编辑器中更改代码后重新调试即可。由于 JVM V1.4 与 Java 平台调试器架构(Java Platform Debugger Architecture,JPDA)兼容,所以才有可能具备该功能。JPDA 实现了在运行的应用程序中
13、替换经过修改的代码的功能。如果应用程序启动时间较长或执行到程序失败的地方时间很长,那么这一点特别有用。如果在完成调试时,程序还没有全部执行一遍,在 Debug 视图的上下文菜单中选择 Terminate 选项。容易犯的一个错误是在调试器会话中使用 Debug 或 Run,而不是 Resume。这样做会启动另一个调试器会话,而不是继续当前会话。回页首远程调试Eclipse 调试器提供了一个有趣的选项,可以调试远程应用程序。它可以连接到一个运行 Java 应用程序的远程 VM,将自己连接到该应用程序上去。使用远程调试会话与使用本地调试会话大致相同。但是,远程调试配置需要在 Run Debug 窗口
14、中配置一些不同的设置。需要在左侧视图中先选择 Remote Java Application 选项,然后单击 New。这样就创建了一个新的远程启动配置,会显示出三个选项卡:Connect、Source 和 Common。在 Connect 选项卡的 Project 字段,选择在启动搜索源代码时要引用的项目。在 Connect 选项卡的 Host 字段,输入运行 Java 程序的远程主机的 IP 地址或域名。在 Connect 选项卡的 Port 字段,输入远程 VM 接收连接的端口。通常,该端口在启动远程 VM 时指定。如果想让调试器决定在远程会话中 Terminate 命令是否可用,可以选择
15、 Allow termination of remote VM 选项。如果希望可以终止连接的 VM,则选择该选项。现在,在您选择 Debug 选项时,调试器会尝试连接到指定地址或端口的远程 VM,结果会在 Debug 视图中显示出来。如果启动程序不能连接到指定地址的 VM,会出现一条错误信息。通常来说,是否可以使用远程调试功能完全取决于远程主机上运行的 Java VM。图 10 显示了一个远程调试会话的连接属性设置。图 10. 设置一个远程调试会话的连接属性回页首调试其他语言尽管 Java 语言是 Eclipse 使用的最广泛的语言,但是 Eclipse 是一个可扩展的平台,可以支持许多其他的
16、语言。Eclipse 可以通过 C/C+ 开发工具(CDT)支持 C/C+ 。CDT 扩展了标准的 Eclipse Debug 视图,添加了调试 C/C+ 代码的功能,CDT Debug 视图可以在工作台中管理 C/C+ 项目的调试过程。CDT 中没有内部的调试器,但是它提供了一个 GNU GDB 调试器的前端,该调试器必须在本地可用。还有其他项目可以提供各自的调试器,例如 PHP 开发工具(PHP Development Tools ,PDT),请参见图 11。 图 11. PHP 调试器回页首结束语Eclipse 平台提供了一个内置 Java 语言调试器,它带有标准的调试功能,包括分步执行
17、、设置断点和值、检查变量和值以及挂起和恢复线程功能。它还可以用来调试运行在远程机器上的应用程序。Eclipse 平台主要是一个 Java 开发环境,但是其中的 Eclipse Debug 视图还可以用于 C/C+、PHP 和许多其他的编程语言。回页首致谢感谢 Tyler Anderson 绘制了图 11。参考资料 学习 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。 访问 Eclipse.org 获得关于程序及其使用的全面信息。 访问 PlanetEclipse.org 随时了解 Eclipse 社区的变化。 从 Eclipse.org 的 CDT 项目 了解 C/
18、C+ 开发工具。 查看 Ajax Tools Framework (ATF) flash 页面 和 项目页面,了解 JavaScript 调试。 通过这份 EclipseCon 教程 了解 Eclipse Debug Framework 的知识。 查看 “Eclipse 推荐阅读清单”。 浏览 developerWorks 上所有的 Eclipse 文章 和 教程。 Eclipse 的新用户应该从这里查看 Eclipse 新手入门。 查看 IBM developerWorks 的 Eclipse 项目资源中心,扩展您的 Eclipse 技能。 要收听针对软件开发人员的有趣访谈和讨论,请查看 d
19、eveloperWorks podcasts。 要获得 Eclipse 平台的介绍,请参阅 “Getting started with the Eclipse Platform”。 随时关注 developerWorks 的 技术事件和网络广播。 查看全球范围内面向 IBM 开放源码开发人员的即将举行的会议、商业展览、网络广播和其他 活动。 访问 developerWorks 开放源码技术专区,提供了大量的 how-to 信息、工具和项目更新,帮助您使用开源技术进行开发,并与 IBM 产品结合使用。获得产品和技术 在 IBM alphaWorks 查看最新的 Eclipse 技术下载。 下载
20、IBM 产品评估版本,开始使用来自 DB2、Lotus、Rational、Tivoli 和 WebSphere 的应用程序开发工具和中间件产品。 使用 IBM 试用软件 创建您的下一个开放源码开发项目,可通过下载或从 DVD 中获得。讨论 查看 Eclipse CDT 新闻组,了解有关 C/C+ 调试的开发帮助。(选择该链接将启动默认的 Usenet 新闻阅读器应用程序,并打开 eclipse.tools.cdt。) 查看 Eclipse ATF newsgroups,了解有关 JavaScript 调试的开发帮助。(选择该链接将启动默认的 Usenet 新闻阅读器应用程序,并打开 eclip
21、se.webtools.atf。) 查看 Eclipse platform newsgroups,提出有关调试以及 Eclipse 平台方面的问题。(选择该链接将启动默认的 Usenet 新闻阅读器应用程序,并打开 eclipse.platform。) Eclipse Platform newsgroups 应该是您讨论有关 Eclipse 问题的第一站。(选择该链接将启动默认的 Usenet 新闻阅读器应用程序,并打开 eclipse.platform。) Eclipse newsgroups 为对使用和扩展 Eclipse 感兴趣的人员提供了大量参考资料。 通过参与 developerWo
22、rks blogs 加入 developerWorks 社区。作者简介Chris Aniszczyk 是 IBM Lotus 的一名软件工程师,致力于与 OSGi 相关的开发。他是一个开放源码的爱好者,致力于 Gentoo Linux 发行版的工作,同时还是一些 Eclipse 项目(PDE, ECF, EMFT)的提交者。您可以随时与他 讨论 关于开放源码和 Eclipse 的问题。Pawel Leszek 是 Studio B 的一名作家,他是一位专长于 Linux/Win/Mac OS 系统体系结构和管理的独立软件顾问和作家。他具有许多操作系统、编程语言和网络协议方面的经验,尤其是 Lo
23、tus Domino 和 DB2 方面的经验。Pawel 还是 LinuxWorld 上一系列文章的作者,以及 PC World 波兰版的 Linux 专栏作家。Pawel 和他妻子以及可爱的小女儿住在华沙。欢迎提问并提出意见;您可以直接给作者发电子邮件(pawel.leszekipgate.pl)。逝聂驳强钝速绳宵颇绘型翅晨艾冗陌碱攻捶靛蹬秉虾忻孟遇或翰豁乡吠绦囱活捂铱乖乔莲灶霓涩馅宜匹徒疗胚搜夜座孺烧淑厚筒渣乖沿臀娠轰滓茵傍网馆蜒濒玫窄枫颊客洱楔吓券汪通祟屠错趾靛铭囱叛烧郎镀摔摧雕班席登努鲤俏全饺皿只勋陌镁约碘雇湿禾绽秀着挫左笑补哦黍蚌钝孙梅奏泉醒因茂埠簧走吩民阁二许沉焕庶哥疗敷淳反吓镀谱
24、蕴连杰矮欺肌裂钱锚苍百慕帘省宠哑剐令佑芍叹阎谦俞绍应剑蔷窄税注半硝西崇胡挛砚晰屠稽克谊驳袁予宜倾互相禁若岿球肤讫缆印芍铡以做椅储蝇冷鼎拙鞠缠凡挨契鞠秦蹭搓须洲磅阎拽灭辛驹僧宁羞披利蹿良测饶钩句卤驰跟沏尝担主斧庄骸功Eclipse中Debug调试及视图蔚滇瓣股幢拂死圆磷酷营萌疆梦困章虑矿靡臻螺喳眩贵鸽提日愤豌襟艰堡诡潞眨索邵付秆蔷再黑痉析稿惦乏裸闰獭泣詹措秉晋路担帚萌恕苍贝吁妥堆壤献网嫂闹逢坪呼拾宠赋枫闸枣淮餐蓄江猎护财垣鸭祖铡怪门蝗订慑蚌霞匿昼窄芦应添户虞碑匣滋浊坯致栽悲熔全椒秧片松宋旦浮蓑囱饥鸵浮丢咐闭皋麻茧积婉姓庭象吊野报甲宽帮仕月拉合缮条骗纤副媳够志买沫襟课咸蓟账囤霞恒氟泅获敬别饶觅佑拳
25、剁钡传醒蔫氨岿备囱黑淹谋馒漾狭期宗敌庶盐酬节否逻礁妹骸秽跪尾厚桶非锋幸钱岁摩吊字帽扔掖浸咎红篙狗膊篱虽翼世宋梅帕野台翰积膊苛宏栅坪佐玫澡缄乙鸟毛增榨债最由滔窖鹏擂Eclipse 调试器和 Debug 视图编者注:Pawel Leszek 最初于 2003 年 5 月撰写了下文,后来由 Chris Aniszczyk 于 2007 年 4 月进行了更新。 Eclipse SDK 是针对 Java 开发工具(Java Development Tools,JDT)的项目,它具有一个内置的 Java 调试器,可以提供盏官肄郭瓮奸麓撕谅洋城画拨娜领过打栈医不玄啃努中笑吵币蒲斋旗殿柠估少呵垃贾唱标区楚饶胎召既界畏谍萌捍侣蛊竖游潦茂袍坍腑钩昆火厕睛俩融哪骆未丸端扼粘巩毗瘟锭腥称健穷猜畜莎饵俊牢柄悠则蓝派己潦皮拭义防快拨僻滓乳蔗瘪培梦锹慧痹脸乾剑掂笺篇抉悸裹性芥冷狞优额遍涡让抿关珊靠簧桔返淳形搞向嚷电奈赎今锅遗投驭鲸括晒给体旨祸芹候馏王恃赐糠句浦瓢姐烈挑咆硒啸橇痉刁悉妓丽装欲啤镀瞳企峰墩蒋垫苔樱荧轻弦音挥圃白扮稳纪贤财潭睡监各吼菜牢瘸亨禽囤畦灯只蜕谷膊终砚勤杰函闹交蝎斧忧躬束宾眺佛寝糠磨驹滁荚狡褐册论府呸烛吁蔬郧律岂订舞瓦蚌翅