Java 远程调试原理
远程调试原理Java 程序是运行在Java 虚拟机(JVM )上的,Java程序统一以字节码的形式在JVM中运行,因为都是类字节码文件,只要本地代码和远程服务器上的类文件相同,两个JVM通过调试协议进行通信,被调试的服务器需要开启调试模式,服务器端的代码和本地代码必须保持一致,则会造成断点无法进入的问题。只要确保本地的Java的源代码与目标应用程序一致,本地的Java的源码就可以用插座连接到远端的
远程调试原理
Java 程序是运行在Java 虚拟机(JVM )上的,Java程序统一以字节码的形式在JVM中运行,
因为都是类字节码文件,只要本地代码和远程服务器上的类文件相同,两个JVM通过调试协议进行通信,
被调试的服务器需要开启调试模式,服务器端的代码和本地代码必须保持一致,则会造成断点无法进入的问题。
只要确保本地的Java的源代码与目标应用程序一致,本地的Java的源码就可以用插座连接到远端的JVM,进而执行调试。本地只需要有源码,本地的Java的应用程序根本不用启动。
传输方式,默认为Socket
Attach
:此种模式下,调试服务端(被调试远程运行的机器)启动一个端口等待我们(调试客户端)去连接;
Socket
:此种模式下,是我们(调试客户端)去监听一个端口,当调试服务端准备好了,就会进行连接。
远程调试包括两个步骤:
- 启动Tomcat启用远程调试
- 用 IDE (这里用IntelliJ IDEA)要能够调试远程Tomcat应用
传递特定的启动参数给 JVM,让它启用远程调试(remote
debugging
)。
JVM 激活远程调试的启动参数有 JPDA_OPTS
, CATALINA_OPTS 和 JAVA_OPTS
。
服务器端开启调试模式,增加JVM启动参数,以支持远程调试
服务器端的Tomcat的安装目录下catalina.sh
文件,在第一行添加参数配置如下:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=ip:8089"
配置添加之后,重启tomcat即可生效(shutdown.sh /startup.sh
)
address=ip:8089,所在服务器ip端口8089
各参数解释
-Xdebug
:通知JVM工作在调试模式下-Xrunjdwp
:通知JVM使用(java debug wire protocol
)来运行调试环境。参数同时有一系列的调试选项:session
:指定了调试数据的传送方式,dt_socket
是指用SOCKET
模式,另外dt_shmem
指用共享内存方式,其中dt_shmem
只适用于窗口平台server
参数是指是否支持在服务器模式的虚拟机中。onthrow
:指明当产生该类型的异常时,JVM
就会中断下来,进行调式该参数任选。release
:指明当JVM
被中断下来时,执行的可执行程序该参数可选。suspend
:指明是否在调试客户端建立起来后再执行JVM
。onuncaught(= y或n)
“指明出现未捕获的异常后,是否中断JVM
的执行。
更多推荐
所有评论(0)