JVM原理
众所周知,Java由于引入了虚拟机JVM,拥有了很好的跨平台和安全性,.java文件由Javac编译成.class文件也叫字节码文件,字节码文件由JVM执行,并由翻译器翻译成各个机器认识的不同的机器码(0101010010101),这样,JVM支持了Java 的跨平台性。
远程调试的应用场景
远程调试很有用,特别是当你的开发环境在Window,又在远端Linux Server或者移动平台上运行Java应用程序,Java提供了一系列的接口和协议让本地Java文件于远端JVM建立联系和通信。
Java远程调试的原理是两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。
首先被debug程序的虚拟机在启动时要开启debug模式,启动debug监听程序。jdwp是Java Debug Wire Protocol的缩写。
方法一:
1、Linux 系统
一般来说什么都不用配置
进入tomcat 的bin 目录下输入命令:
./catalina.sh jpda start
2、window系统
./catalina.bat jpda start
就可以将项目启动,不用执行 ./startup.sh 或 双击startup.bat
myeclipse 窗口配置如下:
选中要远程调试的项目代码,右键单击,选中 Debug As ,点击 Debug Configurations,双击左边树最后一项Remote Java Application ,如下图所示:
host 为服务器IP地址;
Port 为调试的端口地址,该端口并不是项目访问的端口,而是调试端口,是默认的,如果想改的话去
catalina.sh 进行修改。
查看8000 端口命令如下:
netstat -an|grep 8000
debug透视图中如下,
如果要断开的,找到点击,就可以断开连接。
启动调试时提示以下信息:
Failed to connect to remote VM. Connection refused.
Connection refused: connect
出现这种情况的原因:
a、服务器Tomcat还没有启动,
b、没有以Debug模式启动。
解决方案:服务器杀掉tomcat进程,执行./catalina.sh jpda start,查看端口是否可用netstat -an|grep 8000(该端口是否通),再用myeclipse 或eclipse 去连接。
window系统,在catalina.bat里:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
Linux系统,在catalina.sh里:
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
方法三:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
Linux系统,在catalina.sh里:
CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
window系统
在tomcat目录下的bin目录中新建debug.bat,编辑内容如下
set JPDA_ADDRESS=8000
set JPAD_TRANSPORT=dt_socket
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899
startup
双击debug.bat
Linux 系统
startup.sh 中的最后一行 exec "$PRGDIR"/"$EXEXUTABLE" start "$@"中的start修改成
jpda start ,默认的调试端口是8000 ,可以在catalina.sh 文件中设置JPDA_APPDESS=8000
使用startup.sh 或者catalina.sh jpda start 启动tomcat
在tomcat目录下的bin目录中新建debug.bat,编辑内容如下
set JPDA_ADDRESS=8000
set JPAD_TRANSPORT=dt_socket
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899
startup
双击debug.bat
Linux 系统
startup.sh 中的最后一行 exec "$PRGDIR"/"$EXEXUTABLE" start "$@"中的start修改成
jpda start ,默认的调试端口是8000 ,可以在catalina.sh 文件中设置JPDA_APPDESS=8000
使用startup.sh 或者catalina.sh jpda start 启动tomcat