FROM:51cto.com
本文写给那些像几年前的我一样刚刚走出校门,及一些未使用过这些高级些的调试技巧的人。
记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate ,就连毕业设计也是用 System.out 找 Bug 的,想想真的很笨。开始工作后,一个星期过去了,在一个 1 、 2 百万行的系统中找 Bug ,我依然在用 System.out ,当时最痛苦的就是修改代码,每次找到疑似 Bug ,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试 Bug ,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换, 我这个中国教育的半牺牲品才算向美好生活迈进了一小步。
1、 条件断点
断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"
断点的属性界面及各个选项的意思如下图,
2、 变量断点
断点不仅能打在语句上,变量也可以接受断点,
上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。
3、 方法断点
方法断点就是将断点打在方法的入口处,
方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。
4、 改变变量值
代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?
在Debug 视图的 Variables 小窗口中,我们可以看到 mDestJarName 变量的值为 " F:\Study\eclipsepro\JarDir\jarHelp.jar "
我们可以在变量上右键,选择"Change Value..." 在弹出的对话框中修改变量的值,
或是在下面的值查看窗口中修改,保用Ctr+S 保存后,变量值就会变成修改后的新值了。
5、 重新调试
这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。
回退时,请在需要回退的线程方法上点右键,选择 "Drop to Frame"
6、 远程调试
用于调试不在本机上的程序,有两种方式,
1、本机作为客户端
2、本机作为服务端
使用远程调试的前提是服务器端和客户端的代码是一致的。
本机作为客户端
本机作客户端比较常用,需要在远端的服务器上的java程序在启动时打开远程调试开关,
服务器端需要加上虚拟机参数
1.5以前版本(1.5以后也可用):【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 】
1.5及以上版本:【 -agentlib:jdwp=transport=dt_socket,server=y,address=8000】
F:\Study\eclipsepro\screensnap>java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar screensnap3.jar
连接时远程服务器时,需要在Eclipse中新建一个远程调试程序
这里有一个小地方需注意,连接上的时候貌似不能自动切换到Debug视图,不要以为本机的调试程序没有连接到服务器端。
本机作为服务端
同本机作为客户端相比,只需要修改一下“Connection Type”
这时Eclipse会进入到等待连接的状态
连接程序使用如下参数即可连接本机服务器,IP地址请用实现IP替换~~
【-agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000】
F:\Study\eclipsepro\screensnap>java -agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000 -jar screensnap3.jar
远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序时就没有了,不会影响到下次使用时的远程代码。
7、异常断点
经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方就比较难了,还好可以打一个异常断点,
上图中我们增加了一个NullPointException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。
分享到:
相关推荐
在一个 1 、 2 百万行的系统中找 Bug ,我依然在用 System.out ,当时最痛苦的就是修改代码,每次找到疑似 Bug ,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试 ...
断点调试是另一种常用的调试方法。断点是你在代码中设定的一个标记,当执行到这一行时,程序会暂停,让你有机会检查此时的变量状态或执行流程。设置断点通常只需点击行号或在代码行前插入特殊符号(如在IDE中)。你...
除了错误报告,打印语句(如`print`或`var_dump`)是另一种常用的调试手段。通过在代码中插入打印语句,可以查看变量的实时状态,以追踪代码执行流程和查找难以发现的bug。 在开发环境中,使用集成开发环境(IDE)...
标题 "一些与代码质量有关的eclipse插件" 暗示了我们即将探讨的是如何利用Eclipse集成开发环境中的插件来提升代码的质量。Eclipse是一个强大的Java开发工具,而插件则能够扩展其功能,帮助开发者检测和修复代码中的...
通过熟练掌握这些调试技巧,开发者可以更有效地找到和修复Android应用中的bug,提高开发效率。同时,理解源代码的工作原理也有助于优化性能和提升用户体验。在实际工作中,不断实践和学习新的调试方法是持续提升编程...
针对Eclipse的高级用户,掌握一些高级技巧将极大提升开发效率,如自定义工作集保存常用项目组合、创建多个工作区以适应不同项目需求、以及优化Eclipse性能等。同时,了解常见问题的解决方案,如解决CVS文件下载失败...
Java反编译工具是开发人员在处理Java字节码时常用的一种工具,它能够将已编译的.class文件转换回可读的源代码格式,帮助开发者理解或逆向工程现有的Java程序。JAD(Java Decompiler)就是这样一个工具,它提供了方便...
根据提供的标题“调试 debug 方法”和描述“程序员调试bug的方法”,本文将重点介绍软件开发过程中常用的调试技巧与方法。由于给定的部分内容未提供具体的技术细节或实例,本篇文章将基于这些标题和描述来展开讨论。...
1. 常用插件:介绍Eclipse Marketplace中的一些常用插件,如Mylyn(任务管理)、PMD(代码检查)、FindBugs(bug检测)等。 2. 自定义插件:学习如何开发自己的Eclipse插件,以满足特定的开发需求。 六、团队协作 ...
### Eclipse IDE 中的关键快捷键与编辑技巧 #### 引言 Eclipse 是一款非常流行的集成开发环境(IDE),尤其在 Java 开发领域有着广泛的使用。本文将深入介绍 Eclipse 中的一些重要快捷键及其功能,帮助开发者提高...
- **定义**:一种常用的排除bug的方法,通过逐步执行代码,逐步定位问题所在。 - **实践技巧**: - 明确故障范围:缩小排查范围,避免无谓的搜索。 - 记录调试过程:记录调试过程及结果,便于复盘和分享经验。 - ...
在Android系统开发中,深入理解并调试源码是提升应用性能和优化用户体验的关键步骤。...总的来说,这是一种在Android系统源码调试中常用的技巧,对于开发者深入理解Android系统及其内部应用的运作机制具有重要意义。
本文将详细介绍如何在 Eclipse 环境下进行 Android 程序的调试工作,包括基本的调试技巧、日志记录、以及使用 JUnit 进行单元测试的方法。 #### 二、日志记录 在开发过程中,日志记录是一种非常有效的调试手段。它...
本教程旨在帮助初学者理解程序调试的基本概念,并掌握一些常用的调试技巧。 #### 二、调试基础知识 ##### 1. 什么是调试? 调试是指定位并修复程序运行中出现的问题的过程。这些问题可能来自于代码逻辑错误、语法...
下面我们将深入探讨代码调试的基本概念、常用方法以及一些实用技巧。 首先,我们要理解什么是代码调试。代码调试是一种系统性的找出并修复源代码中错误的过程。这些错误通常被称为“bug”,它们可能导致程序崩溃、...
同时,可能提到了一些常用的J2ME开发工具,如NetBeans、Eclipse或者J2ME Wireless Toolkit (J2ME WTK),这些工具在调试和测试J2ME应用时十分关键。 【压缩包子文件的文件名称列表】:“game”可能意味着讨论的BUG与...