远程调试Spring项目
服务端启动:
启动jar包:
一般启动:
java -jar -Dserver.port=8070 huishi-api.jar
远程调试启动:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 huishi-api.jar
address是项目启动以后对外提供的调试端口
复杂的demo:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xms4096m -Xmx4096m -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof /data/dubbo/app/huishi-api.jar --server.port=8080 --dubbo.port=28080 --server.tomcat.basedir=/data/dubbo/cache/esmart-assign_8080 --log.home=/data/dubbo/logs/esmart-assign_8080 --log.level=info --log.stdout=0 --ecej.ops.port=80 --ecej.ops.iswitch=1 --jmx.rmi.port=18080
使用环境变量参数调试jar包:
设置环境变量
set CATALINA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
然后可以直接命令行启动tomcat即可。
如果是内嵌tomcat的话,上面的方法就不行
set JAVA_OPTS= -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
java -jar %JAVA_OPTS% huishi-api.jar
当然这样有点作弊,因为跟上面的命令本质是一样的。
环境变量只对tomcat/weblogic等Web服务器中间件有效,以“java -cp [*.jar] test.Main”方式运行的不会去读取.
使用mvnDebug启动SpringMVC项目:
mvnDebug -DskipTests tomcat7:run -Pirm-web -Pdev
可以查看maven安装包内的bin内的mvnDebug.bat
@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
- Xdebug : 启动debug模式
- Xrunjdwp:启动调试协议JDWP,全称是Java Debug Wire Protocol,它定义了JPDA front-end和JPDA back-end之间通讯信息的二进制格式。这里的通讯信息主要包括两种:调试器发送给JVM的请求信息和JVM发送给调试器的调试信息。有如下子项:
- transport:JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。
- server:y/n 该jvm是被调试者还是调试器
- suspend:y/n 是否等待外部调试器的连接,如jetty启动时候,是否等待eclipse的远程连接后在进行jetty的初始化工作。在调试web容器的时候用的很多
- address:监听端口
使用mvn启动:
设置MAVEN_DEBUG_OPTS环境变量
set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
再使用maven插件spring-boot启动时,可以用
mvn spring-boot:run -Dspring-boot.run.profiles=dev
使用Tomcat,非嵌入式启动:
这里有多种方法可以做到,根据tomcat所运行的操作系统而有些微的不同。但是不管用哪种方法,这些配置的背后都做了同一件事:传递特定的启动参数给 JVM,让它启用远程调试(remote debugging)。
JVM 激活远程调试的启动参数有 JPDA_OPTS, CATALINA_OPTS 和 JAVA_OPTS。其中 JAVA_OPTS 是通常不建议使用的, 因为基于 JAVA_OPTS 的参数设定会暴露给所有的 JVM 应用, 而 CATALINA_OPTS 定义的设定值限制在Tomcat 内。
可以在~/bin/catalina.bat头部写入或者新建setenv.bat文件
在 setenv.bat 文件中写入:
set CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=n"
如果运行在Linux上, setenv.sh 中写入:
export CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=1043,server=y,suspend=n"
当然上面的设置也可以直接放到 catalina.sh (catalina.bat )内,但是有个 setenv.* 额外的配置文件一直是最佳选择, tomcat会自动读取。
要注意的是, 有些人会碰到过用另一个配置方法来启用远程调试:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=1043,suspend=n
-Xdebug and -Xrunjdw 与我们上面推荐的设置不同之处在于, 它是一种旧方式,适用于JVM 小于 JAVA 5.0 的版本(包括5.0), 而 agentlib:jdwp适用于 JAVA 5.0 和以后版本。
最后通过下面的命令行启动tomcat,即可完成tomcat启用远程调试啦。
startup.sh
或者
catalina.sh start
startup.bat
或者
catalina.bat start
如果是window服务的话,必须要在属性中加启动参数,不然的话,是没有效果的。
客户端设置:
IDEA设置:

CommandLine会根据右边选择jdk版本自动生成,直接复制到命令里面就可以
手动配置Host,Port即可。
VsCode设置:
远程调试配置:
launch.json设置:
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 8000
}
在服务端启动以后,启动vs进行调试
服务端启动,远程调试一步到位:
.vscode/tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "myMavenDebugCommand",
"type": "shell",
"command": "mvnDebug spring-boot:run",
"group": "build"
}
]
}
launch.json
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 8008,
"preLaunchTask": "myMavenDebugCommand" // <--It will be executed first.
}
参考:
Intellij IDEA基于Springboot的远程调试
Java远程调试(Remote Debugging)的那些事
远程调试Spring项目的更多相关文章
- [pycharm]远程调试服务器项目
Pycharm远程调试服务器项目 准备工作 创建一个临时项目,用pycharm打开项目 mkdir xxx 准备一台远程服务器,尝试连接服务器 ssh worker@ip 同步项目到pycharm 配 ...
- Idea2016远程调试Java项目
一.在IDEA中配置远程tomcat 1.打开配置页面 选择"+" → "Tomcat Server" → "Remote" 填写名称和目标 ...
- Idea 远程调试jenkins 项目
1.Jenkins配置 jenkins 服务启动时 需要在jvm启动项里加入如下代码: -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y ...
- IDEA中进行远程调试springboot项目
1.以debug的模式启动Springboot项目 命令 java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8888,suspe ...
- visual studio 局域网远程调试web项目
1.进入项目根目录,找到.vs/config/applicationhost.config文件(可能是隐藏的) 2.搜索sites节点,找到当前项目,并添加一个binding配置节,将ip地址设置为本 ...
- java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)
tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- 开发者说 | 使用Visual Studio Code编译、调试Apollo项目
转载地址:https://mp.weixin.qq.com/s?__biz=MzI1NjkxOTMyNQ==&mid=2247484266&idx=1&sn=d6bcd4842 ...
- 使用pycharm调试django项目
要使用pycharm调试django 打断点调试后台代码,首先要进行一下配置: 1.debug 配置 打开debug界面 2.选择python点+加号,然后选择python 3.名字debug,这个看 ...
- IDEA远程调试
问题: 通常在java打成可运行的Jar项目时,运行jar时调试很不方便,特别是要在linux上面执行jar包的情况.此时需要将这个项目打成Jar包(如果是maven项目,直接使用pa ...
随机推荐
- hessian 在spring中的使用 (bean 如 Dao无法注入的问题)
hessian的主要结构分客户端与服务端,中间基于http传输.客户端主要做的事情是把对远程接口调用序列化为流,并传输到服务端:服务端主要做的事情是把传输过来的流反序列化为对服务的请求,调用相应服务后 ...
- 模拟QQ登录
2018-10-28 15:54:38 开始写 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.bor ...
- GGTalk即时通讯系统(支持广域网)终于有移动端了!(技术原理、实现、源码)
首先要感谢大家一直以来对于GGTalk即时通讯系统的关注和支持!GGTalk即时通讯系统的不断完善与大家的支持分不开! 从2013年最初的GG1.0开放源码以来,到后来陆续增加了网盘功能.远程协助功能 ...
- 20165305 实验三 敏捷开发与XP实践
实验3-1 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA 参考 http://www.cnblog ...
- flask实战-个人博客-使用蓝本模块化程序
使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...
- linux--- sort,uniq,cut,wc命令
1.sort [-fbMnrtuk] [file or stdin] -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 J ...
- 计算概论(A)/基础编程练习(数据成分)/1:短信计费
#include<stdio.h> int main() { // 输入当月发送短信的总次数n和每次短信的字数words int n,words; scanf("%d" ...
- 管理mycat命令详解
mycat监听两个端口,分别为8066和9066:mycat服务默认的数据端口是8066,而9066端口则是mycat管理端口,用于管理mycat的整个集群状态.监听的端口可以在server.xml配 ...
- js增加、删除、替换DOM对象
当网页被加载时,浏览器会创建页面的文档对象模型DOM,即Document Object Model 整个文档为一个文档节点(document对象) 每个html元素为一个元素节点(element对象) ...
- fjwc2019 D2T2 定价 (栈+set+贪心)
#182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位, ...