在被调试的java程序启动的时候设置虚拟机运行参数
例如
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=65532 -jar xxx.jar
-jar xxx.jar 是要启动的可运行的jar包
如果jar包内的java代码不像tomcat这种属于一直在后台运行的程序则会出现刚启动还没来得及打开调试器程序就结束了
这时候需要设置suspend=y 即让程序启动后等待调试器debugger连接上65532这个监听端口后再继续运行
如果是调试tomcat 则只需要在tomcat启动的时候传入jpda参数即可
例如:
catalina jpda start
因为catalina脚本里判断如果传入上述参数则运行一下语句,如下
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
具体说明在catalina 脚本注释里,如下
如果tomcat 是注册为windows服务启动的,则catalina.bat脚本不会被执行,所以在脚本设置虚拟机参数也不会生效
这时候需要做如下操作
第一步,在tomcat bin目录找到
我这是是tomcat7 所以是tomcat7w.exe 后面的w表示这是一个带窗口的应用程序
双击打开它
第二步,在Java Options:加入参数 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=65532
第三步,重启tomcat服务
如果你双击tomcat7w.exe 弹出如下窗口,说明你的tomcat在windows服务中的名字不叫tomcat7w,你需要去windows服务管理器中找到tomcat服务的名称,然后把tomcat7w.exe命名成服务的名字,比如abc.exe,然后是双击abc.exe即可。
=====================================分割线
下面是idea远程调试的配置,首先新建一个debug configuration 选择Remote类型
然后填写下面的配置 注意点为:远程的ip和端口号 本地源代码所在项目
然后点击OK
最终运行图如下,连接成功,可以打断点开始调试啦~~