Java,如何调试?

Java,如何调试?

前言

有一个初学java的朋友,向我提了一个问题,如何对java程序进行调试?刚听到这个问题,我想说你打个断点,然后用debug模式启动,最后一步一步调试,去找出问题。一句话,一千个人对它的理解都不一样,何况这一句话,包含了很多操作步骤,在不同应用场景下,理解偏了的可能性很大,下面的内容只为详细的解释这一句话。

Run与Debug

程序运行的两种方式:
Run:程序编译后,运行程序
Debug:程序编译后,以debug模式启动,可以进行调试

开发环境

系统:windows
IDEA: Intellij IDEA
JDK: 1.8

进入Debug模式

用一个实际例子,来说明在debug模式下,在方法设置断点,以及两个常用的技巧。

测试用列:
1.新建一个DebugTest类

2.在main方法设置断点:

3.以debug模式启动java程序:

4.查看堆栈信息:

5.给断点添加条件,右击断点:

6.查看对象:
双击要查看的对象,右键add to watches

在debug模式下,我们知道程序在当前线程,执行到了哪个方法,方法内部是否可以正确被执行,以及方法里的变量是否是程序所期望的,根据方法运行的执行轨迹与变量的值,很快可以查出问题的所在。

Debug的时候,不慌。

在本地进行程序的调试,是很方便的。当远程服务器的程序出问题了,调试时就非常麻烦了,事情一麻烦,心态就有点奔。

远程调试

java支持远程调试,在程序启动时,需要开放远程端口,配置好远程参数即可,调试远程方法可以在本地断点。这种方式不介意使用,特别是在服务器有很多用户在线时。

重要逻辑,使用日志

程序出错时,大部分是逻辑错误,对逻辑熟悉的,几乎可以不用debug模式去,用肉眼应该就可以看出问题,有些大佬就有这样的“肉眼编译器”。当然,没有这个buffer,也没关系,在一些重要的逻辑,使用日志,日志记录一些可提供分析的数据,根据这些数据去分析这个错误。

每一个上线版本,打一个tag

项目每到一个开发阶段,都打一个tag.以上的方法,无法查出问题时,只有直接拉远程上的代码,用实际的测试用例进行分析了。

总之,Debug模式,是为了找出程序的问题,如何快速的找出问题所在,取决于对问题的准确定位,如何准确的定位这个只有靠自己多实践。

jdb,了解一下

jdb是基于文本和命令行的调试工具,该工具位于jdk的bin目录。在介绍jdb这个命令时,需要使用到javac,先看javac

javac命令

javac是将.java文件编译成jvm可以识别.class文件

jdb命令

使用jdb调试java程序

调试用例:
1.使用javac -g DebugTest.java,使用-g这个参数,会生成所有调试信息。一个项目代码比较多时,debug启动会比run模式启动耗时要久。
2.使用jdb DebugTest,运行java程序
3.使用stop in DebugTest.main,设置main方法断点
4.使用run命令,执行应用程序主类
5.step,步入。

jdk的bin目录与java Idea

在开始学习java时,老师都是推荐用记事本去编写代码,在编译时,需要使用javac,编译后使用java命令运行程序,在程序出现问题时,使用jdb命令进行调试,在使用这些命令过程中,从而了解整个程序动态的执行过程。当然在实际开发中,产品要快速迭代,为了效率,都是使用IDEA去开发。IDEA,已经提供了用户体验性很好的界面,当你点击一个按钮时,就会执行一条相应的命令,如java, javac,jdb等等。

结束

这一篇,介绍Debug的场景,与debug的方法,以及idea与Jdk的bin目录的关系,希望对你有帮助。

JackLei
JackLei

我是真的不会修电脑

目前为止有一条评论

kaka 发布于4:15 下午 - 11月 4, 2018

可以可以