使用JDWP远程调试java程序

前言

线上服务器出现的bug,因为各种复杂环境的原因,经常会很难在本地调试,只能到处打log减少重启次数。一直有听说有远程调试这玩意,因为使用场景不多+懒惰一直没去调研,最近终于在一门课程上面揭开了远程调用的面纱,记录一下。

简介

JDWP(Java Debug Wire Protocol)我倾向于翻译为java调试传输协议,即调试器与目标java程序之间的传输协议。JVM自带有对这个协议相应的支持,通过下面的命令可以查看help文档。

/Users/user$  java -agentlib:jdwp=help
               Java Debugger JDWP Agent Library
               --------------------------------

  (see http://java.sun.com/products/jpda for more information)

jdwp usage: java -agentlib:jdwp=[help]|[

接下来讲下具体怎么使用。

目标java程序开启jdwp的监听

增加jvm参数,然后重启java进程

-agentlib:jdwp=transport=dt_socket,server=y,address=8000

即使用socket模式在8000端口监听等待jdwp的客户端,这个客户端就是后文的调试器。
重启之后程序会卡在那里等待有调试器连接之后才会继续启动程序。

  • PS:jvm参数在spring boot项目和tomcat项目怎么加自行google,此处不累赘。
  • PPS:服务器端口开放就不用说了,确定能telnet通再继续下一步吧。

使用IDEA作为调试器(eclipse操作几乎一样)

使用JDWP远程调试java程序_第1张图片
点击运行设置下拉选项

使用JDWP远程调试java程序_第2张图片
点击Edit Configurations...

使用JDWP远程调试java程序_第3张图片
弹出窗口中点击左上角的+号,然后选择Remote

使用JDWP远程调试java程序_第4张图片
设置调试器连接目标程序

使用JDWP远程调试java程序_第5张图片
保存设置之后,点击Debug

连接成功以后,目标程序就会继续启动,然后你就可以在IDE上面给远程的程序打断点了。

你可能感兴趣的:(使用JDWP远程调试java程序)