debug是什么意思_debug的主要功能
程序出现异常了!
返回结果不正确!
在我这边看并没有出现什么问题。
每逢发生这种异常状况,进行问题处理时,我们的第一反应肯定是
我来先调试一下,迅速找出并解决。
如果是线上出现的问题,我们总会想
如果能直接调试一下就好了。
当我们提及调试时,通常指的是在集成开发环境(IDE)中为代码设置断点,并逐步执行代码进行追踪。在此过程中,我们关注变量的值和输出结果。
大多数的调试工具在IDE如Eclipse、IntelliJ IDEA、NetBeans中均有提供,此外还可以使用JDK自带的jdb工具进行高级调试。这些工具支持本地调试以及远程调试功能。
那么,在我们为代码设置断点、进行调试、单步执行等一系列操作背后,其工作原理是如何实现的呢?
要了解这些,就不得不提及Java平台调试架构(JPDA)。我们所使用的每项调试功能,实际上都是依赖JPDA来实现的。
根据官方文档描述:
Java平台调试架构(JPDA)由三个接口组成,专为桌面系统开发环境中调试器的使用而设计。
我们可以看到,JPDA主要由以下三部分构成:
- JVMTI(Java Virtual Machine Tool Interface)
- JDWP(Java Debugger Wire Protocol)
- JDI(Java Debug Interface)
熟悉JVM的开发人员可能听说过JVMPI和JVMDI,但在JDK 1.5之后,它们被统一替换为JVMTI。
关于JVMTI
我们在之前的文章中提到过Class的hotSwap,它是通过Instrument实现class的redefine和retransform。
本质上来说,JVMTI是一个编程接口,主要用于开发和监控。它提供了接口来观察(inspect)应用状态和控制应用的执行。通过这些接口,工具可以实现以下功能:
- 性能分析(profiling)
- 调试(debuging)
- 监控(monitoring)
- 线程分析(thread ysis)
- 覆盖率分析(coverage ysis)
由此可见,我们常用的调试功能,只是JVMTI所提供能力中的一种。
关于JDWP
对于那些观察过Java调试进程的开发者来说,他们可能会注意到以调试方式启动的JVM进程的参数中包含了如"-agentlib:jdwp"的内容。
这里所提到的"-agentlib:jdwp",其实就是我们现在要介绍的JDWP。
什么是JDWP?
Java Debug Wire Protocol(JDWP)是debugger和它要调试的JVM之间进行通信的协议。
需要注意的是,JDWP仅仅是一个协议格式,具体的传输实现并不是由JDWP来完成的。我们的debugger执行的操作发送到JDWP的实现上,然后再由JVMTI来具体控制。
关于JDI
JDI是三个模块中最高层的一个接口。通过JDI,debugger可以更方便地编写符合JDWP格式的数据,用于调试数据传输。JDI的引入提高了开发debugger的效率。
从整体上看,我们可以把JPDA看作两个进行通信的程序之间的桥梁,这使得我们在任何地点都能方便地调试另一个JVM上运行的程序。
每次当我们打开IDE调试一个Java应用,或者远程附加一个Java进程时,不要忘了背后默默支持我们的——JPDA。